此代碼來自樣品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