当前位置:   article > 正文

java线程的中断与恢复_停止,中断,暂停和恢复java线程

java volatile 恢复线程

我开始阅读有关如何安全地停止,中断,暂停和恢复

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),因为我不明白添加它的目的是什么,我的代码可以编译并在没有它的情况下正确运行(具有相同的输出结果).

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/1004266
推荐阅读
相关标签
  

闽ICP备14008679号