此代码来自样品OCP/SCJPJava线程启动方法或方法
我真的不知道为什么Printx()运行之前被称为()。 以及为什么这是有保证的?
public class ConstructorOrRun extends Thread {
private int x = 2;
public ConstructorOrRun() throws Exception {
x = 5;
start();
}
public void printX() throws Exception {
x = x - 1;
System.out.print(x);
}
public void run() {
x *= 2;
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
new ConstructorOrRun().printX();
}
}
'extends Thread'是可怕的做法,除非你的意图是改变线程的工作方式。不要那么做。 – cHao 2014-10-30 02:32:35
Nathan Hughes的“这将是糟糕的形式”答案有点轻描淡写。您不能依赖测试来确定程序是否“线程安全”。在一个操作系统版本上测试不会告诉你它是否可以在不同的操作系统版本上运行。在一个JRE版本中测试不会告诉你它是否能够在不同的JRE版本上工作,今天的测试可能不会告诉你它是否会在明天工作。如果一个程序的正确性取决于一场比赛的结果(例如,像在你的例子中设置x的比赛),那么无论测试说什么,该程序都是错误的。 – 2014-10-30 14:07:31