在下面的代码片段中,将doThings()方法声明为static将使类成为线程安全的.原因是如果启动了多个TestSeven线程,并且由于x是静态变量,可能会出现竞争条件?
public class TestSeven extends Thread{
private static int x;
public synchronized void doThings(){
int current = x;
current++;
x = current;
}
public void run(){
doThings();
}
public static void main(String args[]){
TestSeven t = new TestSeven();
Thread thread = new Thread(t);
thread.start();
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 16
对,就是这样.该synchronized性质doThings只能从被称为由多个线程同时停止它在相同的实例.变量x在全局基础上共享,而不是基于每个实例共享,因此它是不安全的.
在现实世界中,将它想象成一个带有几扇门的浴室 - 有人可以打开一扇门然后将其锁上,但这并不能阻止其他人通过不同的门进入......
| 归档时间: |
|
| 查看次数: |
1041 次 |
| 最近记录: |