【发布时间】:2012-08-08 01:04:54
【问题描述】:
我有正在运行的线程,我想停止并稍后在某个时间点恢复。我学会了不使用 stop() 等,因为这些已被弃用,并且在下面的代码中似乎成功地停止了线程。它只是退出运行方法。现在,我该如何重新启动它?如果我调用 start() 方法,它表示线程仍在运行,那么在这种情况下直接调用 run() 会做吗?它会引起任何问题吗?顺便说一句,这适用于 Android 应用程序,如果这有什么不同的话。
private volatile stopThread;
public void stopButton() {
// this is called when button is clicked
// and thread is already started and running
stopThread= true;
}
public void run() {
while (!stopThread) {
// do something here
}
stopThread=false;
}
编辑:它是一个在线程启动时启动的计时器,然后可以暂停并再次启动。所以 timer 是一个包含 Thread 对象的类(我已经用 SurfaceView 扩展了这个类)。
【问题讨论】:
-
你能详细说明你想恢复线程的条件吗?
-
你不能在同一个线程上调用
start两次。线程是否保持需要重用的状态,或者您可以启动一个全新的线程? -
您需要
wait()和notify()方法。请参阅this 了解一些重要细节。 -
顺便说一句,改变你思考问题的方式有很大帮助。您不想停止和恢复线程。你想阻止一些特定的工作完成,然后再继续做这项工作。这种思考问题的转变将引导您进行更明智的实施。专注于线程正在做的工作,为什么你不想做那个工作,以及如何明智地反映欲望的变化。 (为什么线程编码来做你不想做的工作?)
标签: java multithreading thread-safety