为什么线程等待直到另一个线程完成

时间:2016-01-05 23:35:52

标签: java multithreading

我需要在我的应用程序中使用计时器,它不会阻止应用程序,所以我在class1中创建类计时器并使用计时器创建线程:

Thread cas = new Thread() {
     public void run(){
         casovac = new timer(); 
     }      
};
cas.start();

然后,我在class2中调用计时器方法:

piskvorky.casovac.startTimer();

但是,等待的所有类都是使用计时器完成的线程,其中是:

public void startTimer() {
    zapnuto = true; 
    while(zapnuto) {
        try {
            Thread.sleep(20000);
        } catch(InterruptedException ex) {
            thread.currentThread().interrupt();
        }   
        System.exit(-1);                
    }
}

为什么所有课程都在等待以及如何让他们不等待?

我会感激任何帮助。

2 个答案:

答案 0 :(得分:1)

您的线程仅创建计时器,但不启动它。你可以在class2开始。请尝试改为:

Thread cas = new Thread() {
    public void run(){
        new Timer().startTimer(); 
    }      
};
cas.start();

答案 1 :(得分:1)

您的初始化块

Thread cas = new Thread() {
    public void run(){
        casovac = new timer(); 
    }      
};
cas.start();

在一个单独的线程中,但这并不意味着计时器在该线程上运行。

还要注意它应该是新的Timer()'不是'新的计时器()'除非你使用自己的计时器'类。在这种情况下,名称应更改为' Timer'反正。

当你使用piskvorky.casovac.startTimer()时,你仍然在主线程中调用阻塞应用程序的Thread.sleep(20000)

相反,您应该将startTimer()方法调用移到单独的线程上,以便

Thread cas = new Thread() {
    public void run(){
        casovac = new Timer();
        casovac.startTimer();
    }      
};
cas.start();