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.
No comments:
Post a Comment