Skip to content

Latest commit

 

History

History
70 lines (58 loc) · 2.13 KB

02. Executors.md

File metadata and controls

70 lines (58 loc) · 2.13 KB

Executors

  • Executor provides an alternative way of managing threads through the Thread class.
  • The ExecutorService interface extends Executor by adding methods that help manage and control the execution of threads.
  • ScheduledExecutorService interface is also defined which extends ExecutorService to support the scheduling of threads.
  • Executors utility class provides the following static factory methods to obtain executors.
    • static ExecutorService newCachedThreadPool()
    • static ExecutorService newFixedThreadPool(int numThreads)
    • static ScheduledExecutorService newScheduledThreadPool(int numThreads)
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class Task implements Runnable {
    CountDownLatch latch;
    String name;

    Task(CountDownLatch latch, String name){
        this.latch = latch;
        this.name = name;
    }

    /**
     * Runs this operation.
     */
    @Override
    public void run() {
        for(int i=0;i<5;i++){
            System.out.println(this.name + ": " + i);
            this.latch.countDown();
        }
    }
}

public class Main {

    public static void main(String[] args) {
        CountDownLatch cdl1 = new CountDownLatch(5);
        CountDownLatch cdl2 = new CountDownLatch(5);
        CountDownLatch cdl3 = new CountDownLatch(5);
        CountDownLatch cdl4 = new CountDownLatch(5);
        CountDownLatch cdl5 = new CountDownLatch(5);

        ExecutorService executor = Executors.newFixedThreadPool(2);
        System.out.println("Starting...");

        executor.execute(new Task(cdl1, "A"));
        executor.execute(new Task(cdl2, "B"));
        executor.execute(new Task(cdl3, "C"));
        executor.execute(new Task(cdl4, "D"));
        executor.execute(new Task(cdl5, "E"));

        try{
            cdl1.await();
            cdl2.await();
            cdl3.await();
            cdl4.await();
            cdl5.await();
        }catch (InterruptedException ex){
            System.out.println(ex.getCause());
        }

        executor.shutdown();
        System.out.println("Done");

    }
}