Java java.util.concurrent.locks.Lock如何保证线程之间的内存同步?

时间:2015-03-24 20:19:20

标签: java multithreading concurrency jvm synchronization

查看此java代码段:

 Lock l = ReentrantLock();
 l.lock();
 try {
     counter++;
 } finally {
     l.unlock();
 }

此代码保证只有一个线程会在特定时间内执行try块中的代码。

我的问题是:锁定/解锁机制如何保证线程之间的内存可见性?(是什么机制可以确保计数器结果将被线程X刷新到主内存中,并将通过后面会出现的线程Y从主内存加载?)

1 个答案:

答案 0 :(得分:1)

http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.4.5

  

17.4.5。发生在订单之前

     

可以通过先发生关系来排序两个动作。如果一个动作发生在另一个动作之前,则第一个动作在第二个动作之前可见并且在第二个之前被命令。

     

...

     

从以上定义得出:

     

监视器上的解锁发生在每次后续锁定之前   监视。

     

...

     

在发生之前一致的一组操作中,每次读取都会看到一个写入,允许它通过发生前的顺序看到。

看到暗示是从另一个线程中看到