I google the solution for killing a java thread. And there exists two solutions:
But both of them ar
I would put the call a third-party api which takes a long time into a Callable
and then execute it with a SingleThreadExecutor
specifying a timeout.
Following this approach, the thread will be killed if the call to third party API takes longer than timeOut
, here is some code to exemplify what I am saying:
ExecutorService executor = Executors.newSingleThreadExecutor();
try {
//================= HERE ==================
Future job = executor.submit(thirdPartyCallable);
executor.awaitTermination(timeOut, TimeUnit.SECONDS);
if(!job.isDone())
logger.debug("Long call to 3rd party API didn't finish");
//=========================================
} catch (Exception exc) {
exc.printStackTrace();
} finally {
if(!executor.isShutdown() )
executor.shutdownNow();
}
}
private static Callable thirdParytCallable = new Callable() {
public Boolean call() throws Exception {
//Call to long 3rd party API
//.......
for(long i = 0;i<99999991999999L;i++) {
Thread.sleep(10L);// Emulates long call to 3rd party API
System.out.print(".");
}
return Boolean.valueOf(true);//Data from 3rd party API
}
};