多线程下读写规则,保证各种性质。
1.原子性:
synchronized(){}
2.可见性:可读不可以写
3.有序性:指令重排问题
为什么发生?如何解决?
多线程中****指令重排会影响结果
单线程中不影响的
synchronized是重量级的,影响性能。
voliate关键字解决可见性问题;但是不能保证原子性;可以禁用指令重排。
.join()或者.Alive()
或者interrupt()
但是voliate这么优秀,为什么还要synchronized
CAS:
Compare and swap(乐观锁)
底层是调用了一个Unsafe类,这个类必须通过反射来获取。
synchronized:悲观锁
乐观锁和悲观锁:
synchronized优化: