我正在使用ZMQ
处理请求的Java应用程序。我的代码中有一些嵌套的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
}
}
}
}
这是非常简单的工作流程:
我使用fiddler
发出了执行某项请求。它将创建一个WorkerRunnable。
在下一个请求中,我要停止在步骤1中启动的WorkerRunnable
。
可能发生了我发出多个请求,然后在其中我想停止任何一个请求的情况。如何跟踪所有WorkerRunnable,以及在请求停止它们时如何中断它们?
我尝试了ExecutorService
,但是在这种情况下没有找到使用它的确切方法。请提出正确的方法。
答案 0 :(得分:0)
您是否考虑过在createProcess()
函数中使用 thread pool ?如果您使用的是游泳池,则可以提交Callable
任务添加到池中,并返回Future
个实例。然后,根据实现Callable
对象的方式,您可能可以使用Future.cancel()
方法来中止任务。