java - 如何在执行 SVN 结帐时立即中断正在运行的线程?
问题描述
我有一个摆动应用程序,其中一个子线程执行 SVN 结帐。当用户关闭应用程序时,如果子线程正在进行 SVN 签出,我正在从主线程中断子线程,并且我能够在子线程中捕获 InterruptedException。在 catch 块中,我正在从 SVN 中删除部分签出的内容,这是必须执行的任务。但是中断线程需要很多时间。我需要立即子线程应该抛出 InterruptedException,我该怎么做?
解决方案
斯里坎特。
最好的方法是控制线程的执行,让它随着它的流而结束,而不是中断它。为此,您应该实现一个标志来检查线程流的特定检查点。
考虑一下,如果要检查该标志,则必须等待某个子进程进入线程,例如 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
}
当然,您应该了解 Race Conditions 以在 Stop 和条件之间操作标志。
在这里您可以找到 JAVA 不推荐将挂起和停止操作放入线程的原因。
推荐阅读
- python - 如果输入不是用户需要再次输入的Python代码?
- c# - 根据给定的 DayOfWeek 列表查找下一个 DateTime
- math.net - 为什么 ByVal 函数会改变我的变量?
- android - startScanning() 在 NativeScript App 中找不到任何设备
- python - 在 python 问题上导入和播放音乐:我做错了什么?
- c - 标记元素并将它们存储在 n 叉树中
- mysql - 如何在单个查询中获得零件总数、通过零件数和失败零件数
- java - 如何注入实现相同接口的两个不同类的两个实例?
- linux - 为什么我可以创建比“可用内存”/“线程堆栈大小”更多的线程?
- java - 部署war web应用程序时如何在Jboss 7.1中配置jndi引用名称workmanger和timer