gpt4 book ai didi

java线程暂停、优雅结束并中止

转载 作者:行者123 更新时间:2023-12-01 13:33:00 25 4
gpt4 key购买 nike

主要问题是,在“//does很多东西下面”中,为什么最初写这个检查的人要检查

if (stopscript)
return;

这真的有帮助吗? Obs 中的 stopscript() 调用是否不能保证线程将被停止?当我读到像 http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html 这样的东西时我不明白工作实际上完成在哪里。在他们的 run() 方法中,我不确定在哪里插入要完成的实际工作。

我有一个 Obs 类,其中有一个本地类脚本编写器,并像这样使用它:

Scripter sscript;
Thread scriptthread;

它具有以下内容(不是整个类),只是其中的一部分::

在 Obs 中实例化 Scripter:

   sscript = new Scripter(...);
scriptthread = new Thread(exesscript);
Obsrunning = true;
scriptthread.start();

这些是 Obs 中的其他方法,单击“停止”或“结束”按钮时将调用这些方法。

public void stopscript()
{
sscript.stopscript();

if (obssequencepaused)
{
sscript.resumescript();
JBpause.setText("PAUSE");
}
sscript = null;


}

public void endscript()
{

sscript.endscript();

if (obssequencepaused)
{
sscript.resumescript();
JBpause.setText("PAUSE");
}
}

脚本编写器类信息...

public class Scripter implements Runnable
{

@Override
public void run()
{
//does lots of stuff
}

final public void stopscript()
{
this.stopscript = true;
scriptthread.interrupt();
}

final public void pausescript()
{
this.pausescript = true;
}

final public void resumescript()
{
this.pausescript = false;
}

// sets parameters so loops should just fall through and main run() finishes
final public void endscript()
{

endscript = true;
numpositions = 0;
firstRepeats = 1;
repeats = 1;
}
}

最佳答案

问题和代码细节有点模糊,这使得很难具体理解您所要求的内容和需要帮助的内容,但我会尝试推断。

当类 Scripter 的实例启动时(在 Java 线程上),它将执行 run() 方法中的代码(这是“工作”的地方) '发生)当线程被分配CPU资源时。它像任何其他方法一样运行,如果它返回或完成,则线程完成并且将被清理。

因此如果下面的代码:

if (stopscript)
return;

run()方法中调用,如果条件为真,则return终止run()方法和线程可以安全地终止和清理(大概,正确性取决于您的程序需要做什么以及您如何处理并发)。

如果您只是在运行 Scripter 实例的线程上调用 stop(),它会在任何状态下停止它,即它可能处于中途计算或可能无法正确清理其资源使用情况,如您阅读的 Javadoc 中详述。

它本质上使您的程序更难以预测,因为不允许线程正常终止,这(可能)是有问题的。

关于java线程暂停、优雅结束并中止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21445303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com