首页 > 解决方案 > 如何在执行 SVN 结帐时立即中断正在运行的线程?

问题描述

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

标签: javamultithreadingsvn

解决方案


斯里坎特。

  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
}

当然,您应该了解 Race Conditions 以在 Stop 和条件之间操作标志。

在这里您可以找到 JAVA 不推荐将挂起和停止操作放入线程的原因。


推荐阅读