synchronized保证原子性、可见性、有序性

4,365 阅读1分钟

UI妹子今天夸我长得真帅,“哪里哪里,随便长长而已” “哟~~,谢谢夸奖,相比这个我更喜欢你的眼光” “就喜欢你这一本正经说大实话的样子” 遇到夸奖,心里高兴就别装,大方接受并且还能调侃,才能衬托出你与众不同的魅力

保证原子性

原理:synchronized保证同一时间只有一个线程拿到锁,能够进入同步代码块。

保证可见性

原理:执行synchronized时,会对应lock原子操作会刷新共享变量的值

保证有序性

为什么要重排序

为了提高程序的执行效率,编译器和cpu会对程序中的代码进行重排序

as-if-serial语义

不管编译器和CPU如何重排序,必须保证在单线程的情况下程序的家国结果是正确的。

小结

加上synchronized后,依然会发生重排序,只不过,我们有同步代码块,可以保证只有一个线程执行同步代码快中的代码,从而保证有序性。

扩展

在num和ready共享变量前加volatile关键字也可以保证有序性。