Executor
is in java.util.concurrent package.
Executor
interface has one method execute(), all the class that implements
this interface provides the implementation for this method.
void
execute(Runnable command)
Executes
the given command at some time in the future. Depends on the Executor
implementation, this method can execute in a pooled thread, new
thread or calling thread.
ThreadPoolExecutor
class implements Executor interface, will see the use of execute() by
below example.
WorkerThread.java
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); } } }
SimpleThreadPool.java
import java.util.concurrent.Executor; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; class SimpleThreadPool{ public static void main(String args[]){ Executor 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]); } } }
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
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