final ExecutorService executor = Executors.newFixedThreadPool(1);
final Future<?> future = executor.submit(myRunnable);
executor.shutdown();
if(executor.awaitTermination(10, TimeUnit.SECONDS)) {
System.out.println("task completed");
}else{
System.out.println("Executor is shutdown now");
}
//MyRunnable method is defined as task which I want to execute in a different thread.
Here is run
method of executor class:
public void run() {
try {
Thread.sleep(20 * 1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
Here it is waiting for 20
second but when i run the code it throws an exception:
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
I am not able to close the concurrent thread ruining in Java Executor class
. Here is my Code flow:
- Created a new Thread with Java executor class to run some task i.e written in
MyRunnable
executor
wait for 10 second to complete the tasks.- If the task has completed then runnable thread also got terminated.
- If the task is not completed within 10 second then
executor
class should terminate the thread.
Everything works fine except the termination of tasks in the last scenario. How should I do it?
Best Answer
The
shutDown()
method simply prevents additional tasks from being scheduled. Instead, you could callshutDownNow()
and check for thread interruption in yourRunnable
.An example, based on your code, might be: