我知道synchronized关键字,但我想确保我有清楚的理解。
因此,如果我不使用synchronized关键字,则实例变量可能会被两个线程覆盖,但如果我使用synchronized关键字,则一次只能有1个线程进入该方法。正确?
答案 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。