0
我寫了一個小樣本代碼:多線程:上下文切換
public class Button2 implements Runnable{
JButton jButton = new JButton();
static boolean changeContext = false;
public Button2(){
jButton.setText("ButtonTWO");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
changeContext = true;
((JButton)e.getSource()).setEnabled(false);
}
});
}
@Override
public void run() {
System.out.println("ButtonTWO run...");
jButton.setEnabled(true);
while(true){
if(changeContext)
break;
}
changeContext = false;
}
}
當我運行它想:
Button2 threadTWO = new Button2();
Thread thread2;
try{
thread2 = new Thread(threadTWO);
thread2.start();
thread2.join();
}catch(Exception ex){
System.out.println("Ëxception caught");
}
它從來沒有出來,即使點擊了按鈕之後。
如果我在while(true) in run method
之後加上一個sysout
或Thread.sleep(1)
,它會出現while循環。可能的原因是什麼?
它在while(true){Thread.sleep(1); if(....)}之後添加Thread.sleep時起作用 –