赞
踩
我开始阅读有关如何安全地停止,中断,暂停和恢复
java线程的内容,我在oracle文档中找到了以下解决方案:
1-如何安全地停止线程:
private volatile Thread blinker;
public void stop() {
blinker = null;
}
public void run() {
Thread thisThread = Thread.currentThread();
while (blinker == thisThread) {
try {
Thread.sleep(interval);
} catch (InterruptedException e){
}
repaint();
}
}
– 要停止一个线程,我可以使用布尔变量而不是易失性线程,但为什么Oracle坚持要对启动的线程影响null?在这样做的背后是否有任何秘密(例如使用终结器分配的解放资源)?
2-如何中断等待很长时间的线程:
public void stop() {
Thread moribund = waiter;
waiter = null;
moribund.interrupt();
}
– 为什么我要创建新的变量moribund而不是直接使用waiter.interrupt()?
3-如何暂停和恢复线程:
private volatile boolean threadSuspended;
public void run() {
while (true) {
try {
Thread.sleep(interval);
if (threadSuspended) {
synchronized(this) {
while (threadSuspended)
wait();
}
}
} catch (InterruptedException e){
}
repaint();
}
}
public synchronized void mousePressed(MouseEvent e) {
e.consume();
threadSuspended = !threadSuspended;
if (!threadSuspended)
notify();
}
– 为什么内部运行方法他们添加了循环while(threadSuspended),因为我不明白添加它的目的是什么,我的代码可以编译并在没有它的情况下正确运行(具有相同的输出结果).
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。