<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.17.0</version> </dependency>
final String namingPattern = "_newSingleThreadExecutor_runnable"; final BasicThreadFactory.Builder builder = new BasicThreadFactory.Builder(); final BasicThreadFactory basicThreadFactory = builder.namingPattern(namingPattern).daemon(true).build(); final ExecutorService executorService = Executors.newSingleThreadExecutor(basicThreadFactory); IntStream.iterate(0, i -> i + 1).limit(5).forEach(t -> executorService.execute(() -> System.out.println(Thread.currentThread().getName() + ": " + t))); executorService.awaitTermination(100l, TimeUnit.MILLISECONDS); executorService.shutdown();Output:
_newSingleThreadExecutor_runnable: 0 _newSingleThreadExecutor_runnable: 1 _newSingleThreadExecutor_runnable: 2 _newSingleThreadExecutor_runnable: 3 _newSingleThreadExecutor_runnable: 4
final String namingPattern = "_newSingleThreadExecutor_callable_sync"; final BasicThreadFactory.Builder builder = new BasicThreadFactory.Builder(); final BasicThreadFactory basicThreadFactory = builder.namingPattern(namingPattern).daemon(true).build(); final ExecutorService executorService = Executors.newSingleThreadExecutor(basicThreadFactory); // Callable - synchronous { Callable<Integer> callable = () -> { System.out.println(Thread.currentThread().getName() + ": Callable Sync..."); return 1; }; Future<Integer> task = executorService.submit(callable); Integer result = task.get(); System.out.println(result); } executorService.shutdown();Output:
_newSingleThreadExecutor_callable_sync: Callable Sync... 1
final String namingPattern = "_newSingleThreadExecutor_callable_async"; final BasicThreadFactory.Builder builder = new BasicThreadFactory.Builder(); final BasicThreadFactory basicThreadFactory = builder.namingPattern(namingPattern).daemon(true).build(); final ExecutorService executorService = Executors.newSingleThreadExecutor(basicThreadFactory); // Callable - asynchronous { Callable<Void> callable = () -> { System.out.println(Thread.currentThread().getName() + ": Callable Async..."); return null; }; executorService.submit(callable); } executorService.awaitTermination(100l, TimeUnit.MILLISECONDS); executorService.shutdown();Output:
_newSingleThreadExecutor_callable_async: Callable Async...