gpt4 book ai didi

java - 如何在java中跟踪和实现嵌套Runnable的取消选项

转载 作者:太空宇宙 更新时间:2023-11-04 10:13:00 25 4
gpt4 key购买 nike

我正在开发一个Java应用程序,它使用ZMQ来处理请求。我的代码有一些嵌套的 Runnable ,其结构如下:

private class SomeRunnable implements Runnable {
@Override
public void run() {
while (!stop) {
try {
createProcess();
}
catch (Exception e) {
//handled
}
}
}
}

public void createProcess(){
ZMsg receivedRequest = receiveReq(); // wait for request
Runnable workerRunnable = new WorkerRunnable(receivedRequest, this);
Thread workerThread = new Thread(workerRunnable);
workerThread.start();
}

因此,每次我使用 Fiddler 发送请求时,它都会创建新的 WorkerRunnable 并将 zmq 请求传递给它以进行进一步处理。此 WorkerRunnable 定义为:

private class WorkerRunnable implements Runnable {
@Override
public void run() {
try {
// do something with received request
switch(type) :
case EXECUTE:
startExecution(); // this will internally create one more thread
break;

case STOP:
stopExecution();
break;
}
catch (Exception e) {
//handled
}
}
}
}

这是非常简单的工作流程:

  1. 我使用 fiddler 发出了执行某些操作的请求。它将创建一个 WorkerRunnable。

  2. 在下一个请求中,我想停止在步骤 1 中启动的 WorkerRunnable

可能会发生这样的情况:我发出了多个请求,然后我想停止其中的任何一个请求。如何跟踪所有 WorkerRunnable 以及如何在请求停止时中断它们?我尝试了 ExecutorService,但没有找到在这种情况下使用它的任何确切方法。请建议正确的方法来做到这一点。

最佳答案

您是否考虑过使用 thread pool 在你的 createProcess() 函数中?如果您使用了池,那么您可以提交 Callable任务到池中,并返回Future实例。然后,根据您实现 Callable 对象的方式,您可能可以使用 Future.cancel() 方法中止任务。

关于java - 如何在java中跟踪和实现嵌套Runnable的取消选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52094286/

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