Write a program to create own threadpool in Java


package com.demo.demo;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.stream.IntStream;

public class ThreadPoolDemo {
BlockingQueue<Runnable> blockingQueue;
List<ThreadPool> list;
private boolean stopped = false;

public ThreadPoolDemo(int size) {
blockingQueue = new ArrayBlockingQueue<>(size);
list = new ArrayList<>(size);
for (int i = 0; i < size; i++) {
Thread t = new ThreadPool(blockingQueue);
t.start();
}
}

public void stop() {
stopped = true;
list.stream().forEach(m -> m.stoped());
}

public boolean addTask(Runnable runnable) throws InterruptedException {
if (stopped) {
return false;
}
blockingQueue.put(runnable);
return true;
}
public static void main(String[] args) {
ThreadPoolDemo threadPool = new ThreadPoolDemo(2);
IntStream.range(0, 20).forEach(n->{
try {
threadPool.addTask(new Runnable() {
@Override
public void run() {
System.out.println("starting task : "+n);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("ending task : "+n);
}
});
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
});
}
}

class ThreadPool extends Thread {
BlockingQueue<Runnable> blockingQueue;
private boolean stopped = false;

public ThreadPool(BlockingQueue<Runnable> blockingQueue) {
this.blockingQueue = blockingQueue;
}

public void run() {
while (!stopped) {
try {
Runnable runnable = blockingQueue.take();
runnable.run();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

public void stoped() {
stopped = true;
}

}



Output:-

starting task : 0
starting task : 1
ending task : 0
ending task : 1
starting task : 2
starting task : 3
ending task : 2
ending task : 3
starting task : 4
starting task : 5
ending task : 4
ending task : 5
starting task : 6
starting task : 7
ending task : 6
ending task : 7
starting task : 8
starting task : 9
ending task : 9
ending task : 8
starting task : 10
starting task : 11
ending task : 10
ending task : 11
starting task : 12
starting task : 13
ending task : 12
ending task : 13
starting task : 14
starting task : 15
ending task : 14
ending task : 15
starting task : 16
starting task : 17
ending task : 16
ending task : 17
starting task : 18
starting task : 19
ending task : 19
ending task : 18

Comments

Popular posts from this blog

Check if booleans are same

Program get max salary Female Employee in java8