【发布时间】:2011-05-26 11:30:35
【问题描述】:
我有一个带有按钮的主窗体,当按下该按钮时,应该启动一个新的倒计时线程。
这是按钮动作监听器中的代码:
Counter c = new Counter(timeToFinish);
这是 Counter 类的代码:
class Counter implements Runnable {
int waitingTime = 0;
Thread myCounter = new Thread(this);
public Counter(int waitingTime)
{
this.waitingTime = waitingTime;
myCounter.run();
}
public void run(){
//Start countdown:
do
{
waitingTime -= 1;
try {
Thread.sleep(1000);
System.out.println(waitingTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
} while (waitingTime >= 0);
}
}
问题是,当我创建 Counter 类的新实例时,它会暂停整个程序,而不仅仅是那个线程!问题一定出在“Thread.sleep”上。
【问题讨论】:
-
程序为什么会暂停?是因为当前线程是 UI 线程吗?通常主线程应该通过为每个计数器暂停 1 秒来运行,对吧?
标签: java multithreading sleep