如何在执行SVN签出时立即中断正在运行的线程?



我有一个swing应用程序,其中一个子线程执行SVN签出。当用户关闭应用程序时,如果子线程正在进行SVN签出,我将从主线程中断子线程,并且我能够在子线程中捕获InterruptedException。在catch块中,我正在从SVN删除部分签出的内容,这是执行的强制性任务。但是中断线程需要花费很多时间。我需要立即子线程应该抛出InterruptedException,我怎么能做到这一点?

Srikant.

  1. 最好的方法是控制线程的执行,并使其随其流一起结束,而不是中断它。要做到这一点,您应该实现一个标志来检查线程流的特定检查点。

  2. 考虑如果您想检查该标志,您必须等待一些子进程进入线程,例如SVN操作。因此,您必须注意这些子进程。

  3. 函数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不赞成在线程中暂停和停止操作的原因。

最新更新