• Home
  • LLMs
  • Python
  • Docker
  • Kubernetes
  • Java
  • Maven
  • All
  • About
Java | Executors::newSingleThreadExecutor
  1. Maven - POM Configuration
  2. Example (1): ExecutorService::execute(Runnable)
  3. Example (2) - Synchronous execution: ExecutorService::submit(Callable)
  4. Example (3) - Asynchronous execution: ExecutorService::submit(Callable)

  1. Maven - POM Configuration
    Before you can use the java concurrent API, you need to add some dependencies to your "pom.xml" file.

    Here's the minimal dependencies needed in order for the following examples to work:

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.17.0</version>
    </dependency>
  2. Example (1): ExecutorService::execute(Runnable)
    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
  3. Example (2) - Synchronous execution: ExecutorService::submit(Callable)
    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
  4. Example (3) - Asynchronous execution: ExecutorService::submit(Callable)
    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...
© 2025  mtitek