Java并发编程 | java 内存模型FAQ - 同步的含义

4 没有正确同步的含义

  • A线程写一个变量,B线程读一个变量,但是读和写的发生顺序没有唯一确定。
  • 如果产生这种问题的代码,这个变量就会发生数据竞争(data race)。

5 同步会做什么呢?

  • 有序性:最容易的理解就是互斥的作用 - 一次只有一个线程能占有monitor,其他线程无法进入被这个monitor同步的代码块。
  • 可见性:同步保证之前和同步代码中的数据,可以被其他线程看见;A线程释放monitor的时候,会把本地缓存的数据刷新到主存中。B线程获取monitor时,B所在处理器的本地缓存会失效,必须从主存中reload数据。
  • 对单处理器的系统同样有影响,编译器无法移动获取monitor以及释放monitor之后的代码;

6 Happen-before原则

  • 保证了前一个操作对后一个操作是可见的,但不保证执行顺序。
  • 线程中的每个操作happens before该线程中在程序顺序上后续的每个操作。
  • 解锁一个监视器的操作happens before随后对相同监视器进行锁的操作。
  • 对volatile字段的写操作happens before后续对相同volatile字段的读取操作。
  • 线程上调用start()方法happens before这个线程启动后的任何操作。
  • 一个线程中所有的操作都happens before从这个线程join()方法成功返回的任何其他线程。

猜你喜欢

转载自blog.csdn.net/mike_learns_to_rock/article/details/88095987
今日推荐