I have tested the below callable sample code
ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<String> futureResMap = executorService.submit(new Callable<String>() {
@Override
public String call() throws Exception {
return "thread:1";
}
});
executorService.shutdown();
System.out.println("1");
System.out.println("2");
System.out.println("3");
System.out.println("Thread response:" futureResMap.get());
System.out.println("4");
System.out.println("5");
and gets the output always as below
1
2
3
Thread response:thread:1
4
5
Which means Callable with single thread executor runs synchronously always.
When i tried for runnable as below
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(new Runnable() {
@Override
public void run() {
System.out.println("Thread response:thread:1");
}
});
executorService.shutdown();
System.out.println("1");
System.out.println("2");
System.out.println("3");
System.out.println("4");
System.out.println("5");
Which provides different output every time.
Run:1
1
2
Thread response:thread:1
3
4
5
Run 2:
1
2
3
Thread response:thread:1
4
5
So according to my point of view for Callable with single thread executor is working as synchronous. Callable is mostly for multithreaded implementation. Is my understanding correct?
CodePudding user response:
Method get
of Future
class retrives result of a task, waiting endlessly if it is not avalible.
CodePudding user response:
So according to my point of view for Callable with single thread executor is working as synchronous
No, it does not work synchronously. Both Callable
and Runnable
work similar way. The only difference is the Callable
return value where Runnable doesn't.
See Callable java doc for the explanation.