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

Java 为什么线程等待另一个线程完成,java,multithreading,Java,Multithreading,我需要在我的应用程序中使用定时器,它不会阻塞应用程序,所以我在class1中创建类定时器并使用定时器创建线程: Thread cas = new Thread() { public void run(){ casovac = new timer(); } }; cas.start(); 然后,我调用class2中的计时器方法: piskvorky.casovac.startTimer(); 但是,所有等待线程使用计时器完成的类,其中: pu

我需要在我的应用程序中使用定时器,它不会阻塞应用程序,所以我在
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);                
    }
}
为什么所有的课程都在等待,如何让他们不等待


如果有任何帮助,我将不胜感激。

您的线程只创建计时器,但不会启动它。您可以在
class2
中启动它。请尝试:

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

您的初始化块

Thread cas = new Thread() {
    public void run(){
        casovac = new timer(); 
    }      
};
cas.start();
在单独的线程中,但这并不意味着计时器在该线程本身上运行

还要注意,除非您使用自己的“Timer”类,否则它应该是“new Timer()”而不是“new Timer()”。在这种情况下,无论如何都应该将名称更改为“Timer”

您仍然在主线程内调用
piskworksy.casovac.startTimer()
,当您使用
thread.sleep(20000)
时,主线程会阻止应用程序

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

Thread cas = new Thread() {
    public void run(){
        casovac = new Timer();
        casovac.startTimer();
    }      
};
cas.start();
请发一封信。