所谓线程间的同步实质是保证线程中共享变量的数据同步。
-
volatile 关键字
在get和set的场景下是可以的,由于get和set的时候都加了读写内存屏障,在数据可见性上保证数据同步。但是对于++这种非原子性操作,数据会出现不同步;
-
synchronized
对代码块或方法加锁,结合 wait,notify 调度保证数据同步
-
reentrantLock
结合 Condition 条件设置,在线程调度上保障数据同步
-
CountDownLatch简化版的条件锁
-
cas=compare and swap(set)
在保证操作原子性上,确保数据同步
网友评论