主要问题是在“//下面有很多东西”中为什么最初写这张支票的人
if (stopscript)
return;
这实际上会有所帮助吗?来自Obs的stopscript()调用是否保证线程将被停止?当我读到诸如http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html之类的东西时,我无法完成工作的实际工作。在他们的run()方法中,我不确定在哪里插入要完成的实际工作。
我有一个类Obs,其中我有一个本地类Scripter并使用它像这样:
Scripter sscript;
Thread scriptthread;
它有以下(不是全班),只是它的一部分::
Obs中的Scripter实例化:
sscript = new Scripter(...);
scriptthread = new Thread(exesscript);
Obsrunning = true;
scriptthread.start();
这些是在单击STOP或END按钮时调用的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");
}
}
Scripter类信息......
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;
}
}
答案 0 :(得分:1)
问题和代码细节有点模糊,这使得很难明确地理解你的要求并需要帮助,但我会试着推断。
当启动类Scripter
的实例(在Java线程上)时,它将执行run()
方法中的代码(这是'work'发生的地方)分配了CPU资源。它像任何其他方法一样运行,如果它返回或完成,那么线程就完成了,它将被清理。
因此,如果以下代码:
if (stopscript)
return;
在run()
方法中调用,如果该条件为真,则return
终止run()
方法,并且线程可以安全终止和清理(可能,正确性取决于什么你的程序需要做什么以及你如何处理并发)。
如果你只是在运行stop()
实例的线程上调用Scripter
,它会在它所处的任何状态下停止它,即它可能是计算的一半,或者可能无法正常清理它的资源使用情况详见您阅读的Javadoc。
它本质上使你的程序不太可预测,因为不允许线程优雅地终止并且(可能)有问题。