共享资源问题
多个线程访问同一个资源时,其顺序不能保证,可能会造成错误。可以用sycronized关键字锁住某个对象,保证其访问是异步的。
另一个方案是用lock。
区别:
sycronized是悲观锁,阻塞等待,lock可以搞乐观锁,尝试冲突重试
sycronized死等抱柱信,lock可以设置响应中断
sycronized控制临界资源与await和notify管理有序对应的对象是同一个,lock用newCondition的方式实现了分离,控制更精确。
原子性,可见性,有序性。
volatile保证可见性,通过禁用指令重排保证有序性,但不保证原子性。
syncronized和lock以及AtomicXXX可以保证原子性。
时间: 2024-10-24 05:01:44