public static void main(String[] args) {
//创建阻塞队列
BlockingQueue<Runnable> queue=new ArrayBlockingQueue<>(10);
//创建线程池 new ThreadPoolExecutor.CallerRunsPolicy()拒绝策略为 不抛出异常,不抛弃任务,在提交任务的线程自己执行
ThreadPoolExecutor executor=new ThreadPoolExecutor(2,5,5,TimeUnit.SECONDS,queue,new ThreadPoolExecutor.CallerRunsPolicy());
for (int i=0;i<10;i++){
executor.execute(new Thread(new Runnable() {
@Override
public void run() {
System.out.println("hello");
}
}));
}
}
创建阻塞队列也可以使用LinkedBlockingQueue,我这里使用的是ArrayBlockingQueue
创建线程的参数:核心线程数,最大线程数,空闲的线程保留的时间,保留的时间单位,阻塞队列,线程工厂,(队列已满,而且任务量大于最大线程的异常处理策略)