【发布时间】:2015-11-30 11:55:17
【问题描述】:
线程 A 会:
class A{
public String value;
public void methodA(String value){ //lets say value="test"
this.value=value;
//some code
// Thread B interrupts
System.out.println(value); // prints "haha" but I want it to be "test"
}
}
线程 B 会:
class B{
public void methodB(){
a.setValue("haha");
}
}
methodB 和 methodA 是一些监听方法,它们在不同的线程中执行。
只要methodA 还没有完成,我如何确保该值不会改变?但我也希望之后将“哈哈”分配给价值。所以我希望 B 等到 A 完成 methodA 然后将“haha”分配给 value。
【问题讨论】:
-
我的问题是这不是一个定义的路径。所以方法B可以在方法A完成后执行(我想要的结果)。也可能是 MethodB 在 MethodA 之前执行。但有时,MethodB 会中断 MethodA,我会遇到这个问题
-
一个非常基本的解决方案是将
methodA和setValue都设为synchronized。然后你会想阅读 Oracle 并发教程,这样你就明白你刚刚做了什么。
标签: java thread-safety synchronized