Home > Software design >  Callable thread for singleThreadExecutor is working as synchronously
Callable thread for singleThreadExecutor is working as synchronously

Time:06-30

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.

  • Related