我已经在我的 Java 应用程序中实现了订阅。添加新订阅者时,应用程序会创建新任务(实现 Runnable
的类以在单独的线程中运行)并将其添加到 ExecutorService
中,例如:
public void Subscribe()
{
es_.execute(new Subscriber(this, queueName, handler));
}
//...
private ExecutorService es_;
应用程序可以注册任意数量的订阅者。现在我想实现类似 Unsubscribe
的东西,这样每个订阅者都可以停止消息流。在这里,我需要一种方法来停止在 ExecutorService
中运行的任务之一。但我不知道该怎么做。
ExecutorService.shutdown()
及其变体不适合我:它们会终止所有任务,我只想终止其中一个。我正在寻找解决方案。尽可能简单。谢谢。
最佳答案
您可以使用 ExecutorService#submit而不是 execute
并使用返回的 Future
对象尝试使用 Future#cancel 取消任务
示例(假设 Subscriber
是一个 Runnable
):
Future<?> future = es_.submit(new Subscriber(this, queueName, handler));
...
future.cancel(true); // true to interrupt if running
评论中的重要说明:
如果您的任务不支持中断并且它已经开始,它将一直运行到完成。
关于java - 停止提交给 ExecutorService 的 Runnable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13929618/