java多线程,程序没有退出

时间:2014-01-25 04:56:05

标签: java multithreading

public class test {

    public static void main(String[] args) {
        frame tmp;
        tmp=new frame();
        ExecutorService executor;
        executor=Executors.newCachedThreadPool();
        executor.execute(tmp);
        executor.shutdown();
    }
}





  public class frame extends JFrame implements Runnable{

        int lis;
       public frame()
      {
        setVisible(true);
        lis=1;
        addWindowListener(
          new WindowAdapter() 
          {              
              public void windowClosing(WindowEvent event)
              {
                  lis=0;                 
              }
          }
        );
       }
       @Override
       public void run() {
        while(lis==1)
        {
        }
        JOptionPane.showMessageDialog(null,"close");
      }    
}

我认为在运行类测试后会发生的步骤序列

1)jframe显示并以单独的线程运行

2)关闭jframe后,线程完成执行并执行器关闭

3)类测试终止,因为所有语句都已执行。

但是当我运行班级考试时

关闭jframe类测试后没有终止

任何解释或参考都会有所帮助。谢谢

编辑:假设我创建了两个frame.i希望程序只在所有帧关闭后才退出,而不仅仅是一个jframe。

2 个答案:

答案 0 :(得分:0)

您正在引用来自不同线程的lis变量。根据Java Memory Model,它应该声明为volatile

答案 1 :(得分:0)

您需要设置默认关闭操作。在frame构造函数中,添加:

setDefaultCloseOperation(EXIT_ON_CLOSE);