并发(二)

共享资源问题

多个线程访问同一个资源时,其顺序不能保证,可能会造成错误。可以用sycronized关键字锁住某个对象,保证其访问是异步的。

另一个方案是用lock。

区别:

sycronized是悲观锁,阻塞等待,lock可以搞乐观锁,尝试冲突重试

sycronized死等抱柱信,lock可以设置响应中断

sycronized控制临界资源与await和notify管理有序对应的对象是同一个,lock用newCondition的方式实现了分离,控制更精确。

 

原子性,可见性,有序性。

volatile保证可见性,通过禁用指令重排保证有序性,但不保证原子性。

syncronized和lock以及AtomicXXX可以保证原子性。

 

posted @ 2017-07-10 20:19  剑侠飞蓬  阅读(143)  评论(0编辑  收藏  举报