Java并发编程一些笔记

《Java并发编程》

  • 自旋锁与互斥锁

两者非常类似,只是调度策略的不同。对于独占资源的访问,互斥锁在获得锁之前将一直处于休眠状态,自旋锁则是不断的自我循环来等待锁。对于线程切换没有损失,但消耗CPU,等待过长影响系统性能。

  • 并发包中的信号量与有界阻塞容器

Semaphore用来控制对某种资源的访问数量,可以用来实现资源池化访问,也可以将任何一种容器变成有界阻塞容器。

  • 线程的关闭

大多数时候使用原生线程都是等到运行结束而自动关闭,然而有时候也需要提前结束线程,比如用户取消了操作。但Java没有提供任何机制来安全地终止线程。仅提供了中断(Interruption),这是一种协作机制,能够使一个线程终止另一个线程(Thread.stop和suspend存在缺陷,避免使用)。

解决方案有:非阻塞情况下使用volatile类型的变量来做标记,阻塞框架又存在可中断和不可中断,可中断调用阻塞框架中断方法,例如对阻塞队列的操作。处理好中断异常,保证数据完整性。不可中断的阻塞如IO的操作或者等待获得锁而阻塞,在取消方法中先关闭IO,或者调用Lock类的lockInterruptibly。

  • 线程饥饿死锁

在线程池中,任务依赖其他任务,那么可能产生死锁。在单线程Executor中,一个任务将另一个任务提交到同一个Executor,并且等待这个被提交任务的结果,会死锁。

  • 线程池大小

线程池过大,大量的线程将在相对很少的CPU和内存资源上发生竞争,导致更高的内存占用量。线程池过小导致处理器空闲,减低吞吐率。

  • synchronized与ReentrantLock

两者jvm层语义一致,Java 6及更高版本两者效率差别已经不是很大,Lock具有公平与非公平两种选择,除本身特性之外,非公平锁吞吐率高于公平。其原因是恢复一个被挂起的线程与该线程真正开始运行之间存在较大延时。Lock具有定时锁等待,可中断锁等待,非结构化加锁。

DJI Mavic Pro短暂的体验

  对于一个喜爱摄影的人来说,上帝视角无不充满了诱惑,然而传统摄影方式确实难以触及。这不自从去年大疆创新发布了旗下首款便携无人机Mavic Pro之后就一直长草至今,在得知年前有一批货放出之际,迅速下单购之。然而在收到之后却极其失望,如同大多数国产数码产品,但凡冠以“智能”头衔之后,必然要出现无数的软件问题。(这里可以先卖个关子,有空要盘点下16年购置过的那些“智能(SB)”数码)

  Mavic Pro硬件方面到还不错,外壳衔接,各种接口虽然粗糙了点,但也还耐用。尤其难免会磕磕碰碰的情况下,机身还是很坚固的。三轴云台也是很赞,极其稳定。出现问题的主要还是摄像头,其设定的规格是比精灵系列要低不少,不仅视野少了,传感器尺寸也少了,输出的DNG画质中央暖色调,四周冷色调,JPG则要略好一点。引入的自动对焦也是惨不忍睹,稍微纹理不明显就无法合焦,有趣的是似乎对焦永提示远都是正常的绿色,以至于导出到电脑上才发现不够清晰,整体拍摄水准停留在千元安卓手机水平。App端的拍照和录像设定也是不太方便,录制过程中无法拍照,每次切换手动/自动模式都要重新设定参数,拍夜景简直就是折磨。

  介于这些“缺陷”,限制与定价,个人觉得Mavic Pro的设定应该是一款高端遥控飞行玩具。在DJI并不清晰的产品定位中,Mavic Pro也就入门款,即便下一代,可能不会有很大提升。

  参考:DJI Mavic Pro 官方社区

  照片:花图相册

TOGO Smart fortwo初体验

  “共享出行”这个新事物可以说是火遍了整个16年的下半年,仅深圳以摩拜,ofo为主的共享单车已是遍地开花,随处可见。以其低廉的价格,任意停放的策略还是很非常惠民的。这不最近一家做共享租车的公司又刷爆互联网,在深圳首批试点区域就设在所居住的南山区,提供的车型还是清一色的奔驰Smart fortwo,作为混迹互联网的人自然免不了要尝尝鲜了。

  说到初次下载TOGO App已经是一个月前了,那时候注册帐号还是看不到车的,却已早早提示支付1500的违章押金和驾照认证,不免让人怀疑会不会有跑路嫌疑。直到最近,发现还能偶尔刷出个一两台车,合作的停车场也越来越多,看来时机差不多了。周四提交驾照认证后第二天周五晚上就收到审核通过的短信了,还以为要等到下周一呢,看来效率还是不错的。周六早晨正好刷出一辆车,还是在附近一个停车点,意味着不需要支付上一个人驶入的停车费。早早点了预订,需要在15分钟之内打开车门,好像一天只有三次违约机会。收拾东西就过去了,找到车后发现是停在一个小角落里,旁边用雪糕筒围着,看的出来是临时划出一小片区域给TOGO的专属停车位了。到了附近手机自动显示了开锁,上车检查一番果然如网上所说标配的加油卡不存在,被租客拿走了还是根本没放,谁知道呢,毕竟试运营,行驶证齐全就ok了。钥匙被拴起来的,仅够插入发动车辆,出发~~

  由于并不是直接奔者目的地去的,开去朋友那转了几圈。发现这车真特么灵活,短小的车身,调头如同自行车,正常速度过弯离心力感受特别大,小排量起步也觉得动力充沛。由于没有后排,前排到还觉得挺宽敞的。座位后面凸起部分放拿小行李转身即可摸到,不像传统车,前排没地方放,后排够不着。至于停车,更是方便不解释。要说不足的地方,整车内饰还是low了点,到处塑料不说,挡把,手刹手感极差,塑料玩具似的。蓝牙也没有,没有搁置手机的地方,有一个USB插口,须自备数据线。滨海大道上70噪音就不能忍了。

  至于价格,本次体验差不多2个小时,40公里,车费100多一点,再加一个25的还车附加费,还是比较合理,介于滴滴和传统长租(神州,一嗨)之间,如果说单车是解决3公里出行需求,那TOGO就是解决3公里到50公里之间的一个选择,50公里以上还是长租更合适。

  这个模式投入还是比较大的,Smart fortwo价格大家都清楚,就看怎么拿这笔押金资本运作了,还是希望能壮大起来,方便持证摇号中的人。

花图里程碑3简要报告

  双12那天,花图里程碑3顺利上线了,经过一个月左右的开发,重新设计的UI,交互体验上有了质的飞跃,全面兼容移动端和PC端。后端主要是代码重构和基础框架升级,以及提高安全性等一些功能。现已经全站开启Http 2.0的支持,在最新版Chrome和Safari下加载速度得到了很大的提升。

  这里列出下本次升级前端所用到的开源框架:

1. Semmantic-UI
2. RequireJS
花图上一个版本用的基于Bootstrap二次开发的Flat-UI,由于当时只是简单的用了几个组件,并没有仔细去研究究竟能复用多少,以至于很多地方是自定义style,代码繁杂不堪,没有发挥出Bootstrap优势。所以这次决定完全重写,并引入requirejs模块化加载,css和js彻底从html中分离。

3. Creative Commons Font
用于显示Creative Commons共同创作许可协议的Icons,本着能用font icon就绝不用image。显然字体的显示效果绝对是好过图片的,大小,颜色都可以随意改变,加上操作系统对字体平滑的优化,效果棒棒的。

4. Elastislide
用于照片详情页的缩略图预览,俗称跑马灯效果。上个版本已开始用,增加了些鼠标移动的效果,移动端展示的一些优化。

5. Grayscale
一个Landing page,前期内容不够丰富的时候放一个用作功能介绍,黑白风格,个人蛮喜欢的,也就是现在看到的没登录首页。

6. lightGallery
用于详情页的照片全屏展示,新的版本在缩放动画上略微的有抖动,老版本则比较平滑,但老版本会在url中增加一个hash tag,导致复制出去的链接直接就是全屏。有时间再来研究。

7. Noty
一个基于jQuery的notification组件,各种ajax地方用到。

8. Plupload
大名鼎鼎的Html Uploader,功能强大不说,主要是能支持阿里OSS,Amazon S3进行Web直传。

9. Sortable
upload页面照片排序用,使用比较简单。

10. Underscore
一个小巧而精致的Javascript工具包,目前只用到里面的一个小功能debounce,对浏览器的宽度改变事件做一些延迟处理。

前端大致就这么多了,改天再分享后端的。

荣耀路由Pro更换记

  10月下旬,家里网络开始频繁出现掉网的情况,有时候是Wifi热点消失,有时候是内外网都无法访问,有时候能进入路由器管理后台,发现PPPoE经常被断开,想到可能是路由器出问题了。结果在换了路由后发现ADSL猫也不太稳定了,表现为除了电源灯,其余几个都不亮,且电源灯明暗闪个不停,关机一段时间能恢复,久了又出现。

  一查发现两个设备都是在2012年6月份先后购买的,也才用了4年,一起上岗,一起退休~~~型号分别是TP-LINK TL-WR800N和Mercury MD880D,取而代之的是荣耀路由Pro和TP-LINK TD-8620T

  其实很早前就打算换过一次路由,毕竟802.11n协议下的150M的速度早已不能满足需求了。那时候正好小米路由3刚发布,买了一台。用了几天发现不是很稳定,而且受不了Wifi连接上去会弹出一个连接成功的窗口,搞的和运营商网络似得。

  多方对比后决定买了这个华为荣耀路由Pro,一来外观好看,现在要再买个竖着天线的真觉得是上个世纪的设计了。二来4个千兆Lan口,满足内网文件分享需求,一个千兆Wan口,未来换地方升级100m+也足以了。5G AC下可达到867Mbps,足以喂饱Macbook Pro。唯一不足的是USB端口还是停留在2.0。插上移动硬盘下读取文件到mac上10m以内,5GB以下片源基本无压力。提供的Hilink APP也算一个亮点吧。

  观察了十来天,暂时一切较稳定,要能开放SSH,那可玩性就非常高了。

img_4739