Код: Выделить всё
public class MyClass implements Runnable {
public void internalCall() {
logger.info("B-1");
//Some business code which may take too long
//
logger.info("B-2");
}
public void launch() {
// Wrapper
Callable callable = new Callable() {
@Override
public Object call() throws Exception {
internalCall();
return null;
}
};
// Submit
ExecutorService executor = Executors.newSingleThreadExecutor();
Future future = executor.submit(callable);
try {
// Wait
future.get(1, TimeUnit.SECONDS);
}
catch (TimeoutException e) {
logger.warn("Timeout");
}
finally {
logger.info("A-1");
executor.shutdownNow();
future.cancel(true);
logger.info("A-2");
}
}
}
Код: Выделить всё
INFO | B-1
WARN | Timeout
INFO | A-1
INFO | A-2
Код: Выделить всё
INFO | B-1
WARN | Timeout
INFO | A-1
INFO | A-2
INFO | B-2
Я бы хотел просто принудительно уничтожить объекты из метода launch(), атаковав объект Furure или executor.
Подробнее здесь: https://stackoverflow.com/questions/298 ... torservice
Мобильная версия