я написал небольшой пример кода:Многопоточность: Переключение контекста
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");
}
Он никогда не выходит, даже после того, как кнопка, нажав кнопку.
Если я добавлю sysout
или Thread.sleep(1)
после while(true) in run method
, он выходит из цикла while. Какова может быть возможная причина?
Он работает, когда я добавляю Thread.sleep после while (true) {Thread.sleep (1); if (....)} –