Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

public class Main {
    static int MAX_THREADS = 10;

    public static void main(String[] args) throws Exception {
        System.out.println("Thread pool size = " + MAX_THREADS);
        ExecutorService executor = Executors.newFixedThreadPool(MAX_THREADS);
        Future previousFuture = null;
        for (int i = 0; i < MAX_THREADS; i++) {
            JobRunnable job = new JobRunnable(i, previousFuture);
            previousFuture = executor.submit(job);
        }
        executor.shutdown();
        executor.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
        System.out.println("Program done.");
    }
}

class JobRunnable implements Runnable {
    int _lineIdx;
    Future f;

    public JobRunnable(int lineIdx, Future previousFuture) {
        _lineIdx = lineIdx;
        f = previousFuture;
    }

    public void run() {
        try {
            Thread.sleep(1000);
            String currentThreadName = Thread.currentThread().getName();
            System.out.println("Thread " + currentThreadName + " is done with its work on line " + _lineIdx);
            if (f != null) {
                System.out.println("Thread " + currentThreadName + " will wait for future " + f
                        + " before printing its results.");
                f.get();
            }
            System.out.println("RESULT: " + _lineIdx + " (Printed on Thread " + currentThreadName + ")");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}