简单模拟实现一个线程池

废话不多说之间上代码

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


public class MyThreadPoolExecutor {
    private List<Thread> list=new ArrayList<>();
    private BlockingQueue<Runnable> blockingQueue=new ArrayBlockingQueue<>(100);
    public MyThreadPoolExecutor(int size) {
        for (int i = 0; i < size; i++) {
            Thread thread=new Thread(()->{
                while (true) {
                    Runnable runnable= null;
                    try {
                        runnable = blockingQueue.take();
                        runnable.run();
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
            });
            thread.start();
            list.add(thread);
        }
    }

    public void submit(Runnable runnable) throws InterruptedException {
        blockingQueue.put(runnable);
    }
}

这里模拟的是固定数量的线程池

下面通过一个示例简单演示一下

public class Test {
    public static void main(String[] args) throws InterruptedException {
        MyThreadPoolExecutor myThreadPoolExecutor=new MyThreadPoolExecutor(5);
        for (int i = 0; i < 100; i++) {
            int count=i;
            myThreadPoolExecutor.submit(()->{
                System.out.println(Thread.currentThread().getName()+"执行"+count);
            });
        }
    }
}

简单模拟实现一个线程池_第1张图片

你可能感兴趣的:(java)