我試圖按以下方式啓動/停止Java線程。Java:線程間變量的同步
public class ThreadTester {
public static void main(String[] args) {
MyThread mt;
int max = 3;
for (int i = 0; i < max; i++) {
mt = new MyThread();
mt.start();
mt.finish();
}
}
}
public class MyThread extends Thread {
private volatile boolean active;
public void run() {
this.active = true;
while (isActive()) {
System.out.println("do something");
}
}
public void finish() {
this.active = false;
}
public boolean isActive() {
return active;
}
}
一切正常只有最大< = 2。否則一些線程繼續他們的輸出,雖然isActive
應該返回false。這至少是我的期望。
問題:什麼是可變的「高手」之間同步的正確方法和它的「奴隸」的主題?
這將有助於解釋爲什麼你認爲,如果大豆> 2 – 2010-11-11 23:22:10
基於代碼最高似乎是無關的,爲什麼它的失敗它不工作。 – 2010-11-11 23:24:24
這個數字並非無關緊要。取決於內核數量和線程調度,假設你可能會啓動2個線程,但是第三個線程在run()發生之前調用它,完成調用 – 2010-11-11 23:25:51