在下面的代码片断中,将doThings()方法声明为静态会使类是线程安全的。是这样的原因,如果多个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();
}
}
顺便说一下,你传递一个TestSeven,它是一个Thread作为Thread构造函数的参数。这是可行的,因为Thread IS-A Runnable,但不推荐,你最好使TestSeven实现Runnable –