gpt4 book ai didi

Java - 如何停止运行任意代码的线程?

转载 作者:行者123 更新时间:2023-12-02 00:45:09 25 4
gpt4 key购买 nike

在我的应用程序中,在单独的线程中运行用户提交的代码[1],在某些情况下,代码可能需要很长时间才能运行,甚至可能有无限循环!在这种情况下,我该如何停止该特定线程?

我无法控制用户代码,因此我无法从内部检查 Thread.interrupted() 。我也不能粗心地使用Thread.stop()。我也无法将这些代码放在单独的进程中。

那么,有什么办法可以处理这种情况吗?

[1] 我正在使用 JRuby,用户代码是用 ruby​​ 编写的。

最佳答案

根据您提供的约束:

  1. 您无法控制用户提交的代码。
  2. 无法强制检查 Thread.interrupted()
  3. 无法使用Thread.stop()
  4. 无法将用户代码放入进程 jail 中。

您的问题的答案是“不,没有办法处理这种情况”。您几乎已经系统地设计了一些东西,以便您对不受信任的第三方代码具有零控制。这是......次优设计。

如果您希望能够处理任何事情,则必须放松上述限制中的一个(或最好是多个!)。

<小时/>

编辑添加:

如果这是一个(另一个)约束,您可能有一种方法可以解决这个问题,而无需强制您的客户更改代码。在另一个进程中启动 Ruby 代码,并使用某种形式的 IPC 机制与主代码库进行交互。为了避免强制 Ruby 代码突然必须编码为使用显式 IPC,请为您的 API 放入一组代理对象,这些对象在幕后执行 IPC,这些对象本身在您自己的服务器中调用代理对象。这样,您的客户端代码就会产生在服务器内部工作的错觉,同时您将该代码囚禁在自己的进程中(您最终可以 kill -9 作为最终制裁)。

稍后您将希望让您的客户摆脱这种幻想,因为 IPC 和 native 调用非常不同,将其隐藏在代理后面可能是邪恶的,但这是您可以使用的权宜之计您弃用 API 并将您的客户端转移到新的 API。

关于Java - 如何停止运行任意代码的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5218641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com