Sunday 9 March 2014

ExecutorService : shutdown()

void shutdown()
Initiates shut down of threads, once all the initiated tasks are executed. No new tasks are accepted once the shutdown initiated.

class WorkerThread implements Runnable{
 String taskName;

 WorkerThread(String taskName){
  this.taskName = taskName;
 }

 public void run(){
  try{
   Thread t1 = Thread.currentThread();
   System.out.println(t1.getName() + " executing the task " + taskName);
   t1.sleep(1000);
   System.out.println(t1.getName() + " completed the task " + taskName);
  }
  catch(Exception e){
   System.out.println(e);
  }
 }
}

import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

class SimpleThreadPool{
 public static void main(String args[]){
  ExecutorService exec = new ThreadPoolExecutor(5, 5, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());

  WorkerThread tasks[] = new WorkerThread[10];
  for(int i=0; i<10; i++){
   tasks[i] = new WorkerThread("task" + i);
   exec.execute(tasks[i]);
  }
  exec.shutdown();
 }
}
  
Sample Output
pool-1-thread-1 executing the task task0
pool-1-thread-4 executing the task task3
pool-1-thread-5 executing the task task4
pool-1-thread-2 executing the task task1
pool-1-thread-3 executing the task task2
pool-1-thread-1 completed the task task0
pool-1-thread-1 executing the task task5
pool-1-thread-4 completed the task task3
pool-1-thread-4 executing the task task6
pool-1-thread-5 completed the task task4
pool-1-thread-5 executing the task task7
pool-1-thread-3 completed the task task2
pool-1-thread-3 executing the task task8
pool-1-thread-2 completed the task task1
pool-1-thread-2 executing the task task9
pool-1-thread-4 completed the task task6
pool-1-thread-1 completed the task task5
pool-1-thread-5 completed the task task7
pool-1-thread-3 completed the task task8
pool-1-thread-2 completed the task task9

Executor exec = new ThreadPoolExecutor(5, 5, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
Above statement create a thread pool of size 5. So it can run 5 tasks at a time, Since 5 threads are reside in the pool.

exec.submit(tasks[i])
Submit the tasks to the thread pool. When the task is submitted, ThreadPool assigns a thread to execute the run method of the Runnable Object.



ExecutorService interface                                                 RejectedExecutionException                                                 Home

No comments:

Post a Comment