当前位置: 首页 > 面试题库 >

如果我对Thread.interrupt()的调用无法正常工作,如何正确停止线程?

何睿范
2023-03-14
问题内容

一个众所周知的事实是,不要停止使用Thread.stop()运行进程。

通常,手册和教程建议改用Thread.interrupt()或一些布尔变量,并从代码内部检查该中断或变量。

但是,如果我有一个库方法有时需要花费很长时间才能执行,并且我想让用户能够停止该过程?库没有给我提供执行此操作的机制(不检查线程中断状态,也没有“
stop!”变量)?

而且,更糟糕的是,要么没有库的源代码,要么太大了,无法对其进行编辑并在适当的位置添加检查。

似乎Thread.stop()是这里唯一的解决方案。也许有一些解决方法?


问题答案:

如果实际情况合适,请生成另一个进程并将其视为工作单元,而不是线程。进程终止更具有确定性,尽管将进程专门用于线程的工作对于您的情况而言可能过于繁重。



 类似资料:
  • 问题内容: 我需要一个解决方案来正确停止Java中的线程。 我有实现Runnable接口的类: 我有启动和停止线程的类: 但是当我关闭时,我在类中得到了异常: 我正在使用JDK 1.6。所以问题是: 如何停止线程并且不引发任何异常? PS我不想使用;方法,因为它已过时。 问题答案: 在类中,你需要一种设置标志的方法,该标志通知线程它将需要终止,类似于你刚刚在类范围中使用的变量。 当你希望停止线程时

  • 问题内容: 好吧,我的代码可以正常工作,但是如果我想重试输入密码时键入No,它将无法正常工作。它只是进入输入密码行(第20行)。我尝试了多种方法来解决此问题,但我根本无法解决。 问题答案: if passretry == ‘yes’ or ‘Yes’: 上面的if语句评估为:- 现在,由于被评估为,所以您的陈述始终为,因此您总是必须输入新密码。 您需要将条件更改为:- 同样,以下内容应更改为:-

  • 问题内容: 我使用以下代码在Python中启动并关闭 在脚本结束执行后,我仍然在Mac活动监视器中找到的实例。实际上,每次我运行脚本时,都会创建一个新进程。 我应该如何关闭驱动程序? 问题答案: 不保证该方法释放与驱动程序实例关联的所有资源。请注意,这些资源包括但不限于驱动程序可执行文件(在这种情况下为PhantomJS)。该方法旨在释放驱动程序的所有资源,包括退出可执行进程。

  • 问题内容: 我正在编写一个脚本(多线程)以从网站上检索内容,并且该网站不是很稳定,因此时不时会有一个挂起的http请求,甚至无法超时。由于我无法控制该网站,所以我唯一能做的就是改善代码,但现在我的想法已经用尽。 样例代码: 我该怎么做才能迫使挂起的请求退出?其实我想知道为什么一开始不起作用。有人可以帮我吗? 补充:(是的问题仍然没有解决) 好的,我遵循了tomasz的建议,将代码更改为,但是同样的

  • 我正在使用IntentService将图像上传到服务器。我的问题是我不知道如何/何时停止服务。当我在onHandleIntent(意图..)中调用stopself()时将删除在IntentService队列中等待的所有意图。但我不想停止活动中的服务,因为我想完成上传过程,即使我的应用程序没有运行。

  • 计划程序的设置: 和@enableScheduling在类中使用@configuration。 问题是fixedDelay正确工作两次,然后在迭代之间暂停1.5分钟。我在计划注释中尝试过fixedRate或cron,但都没有帮助。 方法在调度任务中的工作时间为100ms,项目有足够的内存,但调度程序的工作速度很慢。