我有一个swing应用程序,其中一个子线程执行SVN签出。当用户关闭应用程序时,如果子线程正在进行SVN签出,我将从主线程中断子线程,并且我能够在子线程中捕获InterruptedException。在catch块中,我正在从SVN删除部分签出的内容,这是执行的强制性任务。但是中断线程需要花费很多时间。我需要立即子线程应该抛出InterruptedException,我怎么能做到这一点?
Srikant.
-
最好的方法是控制线程的执行,并使其随其流一起结束,而不是中断它。要做到这一点,您应该实现一个标志来检查线程流的特定检查点。
-
考虑如果您想检查该标志,您必须等待一些子进程进入线程,例如SVN操作。因此,您必须注意这些子进程。
-
函数
run()
结束后线程结束。这是完成一根线的正确方法,用一种"有机"的方式。道路因此,您应该寻找如何以这种方式完成线程,而不是强迫它。
public void stop()
{
if(flag)
flag=false;
}
public void run()
{
while(flag)
{
if(flag)
svn.oper1()
else
break; //Exit while
if(flag)
svn.oper2()
else
break; //Exit while
}
notifyTheadFinishEvent(); //Notify to main thread.
//Thread ends
}
当然,您应该注意竞态条件,以便在停止和条件之间操作标志。
在这里你可以找到JAVA不赞成在线程中暂停和停止操作的原因。