Sunday, 9 March 2014

ExecutorService

ExecutorService is in java.util.concurrent package.

ExecutorService extends the Executor interface. Executor interface has only one method execute() in it.

ExecutorService Interface provides several features like shutdown the pool of threads, once they are done with their tasks execution, Blocks until all tasks have completed execution after a shutdown request etc.,

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]);
  }
 }
}

Sample Output
pool-1-thread-2 executing the task task1
pool-1-thread-1 executing the task task0
pool-1-thread-3 executing the task task2
pool-1-thread-4 executing the task task3
pool-1-thread-5 executing the task task4
pool-1-thread-2 completed the task task1
pool-1-thread-3 completed the task task2
pool-1-thread-3 executing the task task6
pool-1-thread-4 completed the task task3
pool-1-thread-4 executing the task task7
pool-1-thread-5 completed the task task4
pool-1-thread-5 executing the task task8
pool-1-thread-1 completed the task task0
pool-1-thread-1 executing the task task9
pool-1-thread-2 executing the task task5
pool-1-thread-4 completed the task task7
pool-1-thread-3 completed the task task6
pool-1-thread-5 completed the task task8
pool-1-thread-2 completed the task task5
pool-1-thread-1 completed the task task9

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. In the above program, once the tasks execution finished, program simply waits, since the thread in the pool are not shutdown.

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.




Check the cancellation status                                                 Shut down thread pool                                                 Home

No comments:

Post a Comment