java多线程——原子性、可见性、顺序性

原子性

即一个或多个操作要么不执行,要么就全部执行完毕,不会被其他因素打断。类似于数据库的事务。

因此可以通过锁、synchronized来确保。volatile是无法保证复合操作的原子性。

可见性

当多个线程共享一个变量时,若其中一个线程改变变量的值,其他线程立即就能够看到,即为可见性。

Java提供了volatile(易变的)关键字来保证可见性。

有序性

即程序执行的顺序按照代码的先后顺序执行。

主要受到happens-before原则(先行发生原则)影响

happens-before原则(先行发生原则)

  1. 程序次序规则:前一行代码优先于后一行代码执行;
  2. 锁定规则:前一个unlock操作优先于后一个unlock操作执行;
  3. 易变(volatile)变量规则:对于一个volatile变量写操作优先于读操作;
  4. 传递规则:A操作优先于B操作,B操作优先于C操作,则可推出A操作优先于C操作。
posted @ 2022-01-19 20:13  Kisen  阅读(175)  评论(0)    收藏  举报