实例方法是否能够在java中默认同时执行?

时间:2013-01-26 07:03:39

标签: java concurrency synchronized

我知道synchronized关键字,但我想确保我有清楚的理解。

因此,如果我不使用synchronized关键字,则实例变量可能会被两个线程覆盖,但如果我使用synchronized关键字,则一次只能有1个线程进入该方法。正确?

2 个答案:

答案 0 :(得分:2)

  

如果我不使用synchronized关键字,则实例变量可能会被两个线程覆盖

它不会被“覆盖”,但它可以同时由两个线程执行,如果它不是为处理这种情况而导致可能的不一致。

  

如果我使用synchronized关键字,则一次只能输入1个线程。

如果你制作方法synchronized,这是正确的:该关键字提供了一定数量的保证,包括互斥。

答案 1 :(得分:2)

如果两个线程进入非同步方法并更新某个共享状态,则可能导致不一致。

public synchronized void method(){ 
      //only one thread will be able to enter (IF SAME INSTANCE)
}

但它也建立了发生之前关系。这是多线程的可见性部分。

  

可以通过先发生关系来排序两个动作。如果一个   行动发生在另一个之前,然后第一个是可见的和   在第二天之前订购。

Happens-before JLS。