import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; public class MyThreadFactory implements ThreadFactory { private final String name; private final AtomicInteger integer = new AtomicInteger(1); public MyThreadFactory(String name) { this.name = name; } /** * {@inheritDoc} */ @Override public Thread newThread(Runnable r) { return new Thread(r, name + integer.getAndIncrement()); } public static void main(String[] args) { ExecutorService es = Executors.newFixedThreadPool(5, new MyThreadFactory("Test")); try { for (int i = 1; i <= 5; i++) { es.execute(new Runnable() { @Override public void run() { try { System.out.println(String.format("[%s] Sleeping for 3 secs", Thread.currentThread().getName())); TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); } } }); } } finally { es.shutdown(); try { es.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { e.printStackTrace(); } } } }
Friday, October 21, 2011
How to Set Name in the Threads Created by ExecutorService
If we create a java.util.concurrent.ExecutorService without any argument, it will use DefaultThreadFactory, which has a pre-defined thread name, e.g. pool-n-thread-. To be able to set a different name for threads created by the ExecutorService, we need to create our own ThreadFactory like the example below.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment