Я работаю над приложением 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
}
}
}
}
и вот очень простой рабочий процесс:
Я сделал запрос, используя fiddler
для выполнения чего-либо. Будет создан один WorkerRunnable.
В следующем запросе я хочу остановить WorkerRunnable
, запущенный на шаге 1.
Может случиться, что я сделал несколько запросов, и среди них я хочу остановить любой один запрос. Как отследить все WorkerRunnable и как их прервать, если приходит запрос на их остановку?
Я попытался ExecutorService
, но не нашел точного способа использовать его в этом сценарии. Пожалуйста, предложите правильный способ сделать это.