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时起作用 –