public class Main {
public static void main(String[] args) throws Exception {
// 有界队列(当创建的线程超出了最大线程数,就会到队列中进行等待。)
// 当创建的线程数 > 线程池的最大线程数 + 队列的数量 的时候多余的线程将会被拒绝(线程就不会再创建了)
BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(9);
// 放弃拒绝的任务并抛出异常(拒绝策略)
RejectedExecutionHandler abortPolicyHandler = new ThreadPoolExecutor.AbortPolicy();
// 放弃拒绝任务抛出异常 (拒绝策略)
RejectedExecutionHandler discardPolicyHandler = new hreadPoolExecutor.DiscardPolicy();
// 这里的线程池最终会拒绝一个线程
ThreadPoolExecutor threadPool =
new ThreadPoolExecutor(2, 5, 6, TimeUnit.SECONDS, workQueue, discardPolicyHandler);
long start = System.currentTimeMillis();
for (int i = 0; i < 15; i++) {
MyTask myTask = new MyTask();
threadPool.execute(myTask);
System.out.println("核心线程数" + threadPool.getCorePoolSize());
System.out.println("最大线程数" + threadPool.getMaximumPoolSize());
System.out.println("线程池数" + threadPool.getPoolSize());
System.out.println("队列任务数" + threadPool.getQueue().size());
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + i);
}
System.out.println(System.currentTimeMillis()-start);
threadPool.shutdown();
if (threadPool.awaitTermination(6, TimeUnit.SECONDS)) {
threadPool.shutdownNow();
}
}
}
// 创建线程
class MyTask implements Runnable {
public void run() {
try {
Thread.currentThread().sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ", hello");
}
}
java线程池
最新推荐文章于 2025-05-20 22:23:34 发布