线程池如何处理Runnable任务
使用ExecutorService的方法:
void execute(Runnable target)
package com.itheima.d8_threadpool; public class MyRunnable implements Runnable{ @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + "输出了:HelloWorld ==> " + i); } try { System.out.println(Thread.currentThread().getName() + "本任务与线程绑定了,线程进入休眠了~~~"); Thread.sleep(10000000); } catch (Exception e) { e.printStackTrace(); } } }
package com.itheima.d8_threadpool; import java.util.concurrent.*; /** 目标:自定义一个线程池对象,并测试其特性。 */ public class ThreadPoolDemo1 { public static void main(String[] args) { // 1、创建线程池对象 /** public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) */ ExecutorService pool = new ThreadPoolExecutor( 3, 5 , 6, TimeUnit.SECONDS, new ArrayBlockingQueue<>(5) , Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy() ); // 2、给任务线程池处理。 Runnable target = new MyRunnable(); pool.execute(target); pool.execute(target); pool.execute(target); pool.execute(target); pool.execute(target); pool.execute(target); pool.execute(target); pool.execute(target); // 创建临时线程 pool.execute(target); pool.execute(target); // // 不创建,拒绝策略被触发!!! // pool.execute(target); // 关闭线程池(开发中一般不会使用)。 // pool.shutdownNow(); // 立即关闭,即使任务没有完成,会丢失任务的! pool.shutdown(); // 会等待全部任务执行完毕之后再关闭(建议使用的) } }
一共最大5个线程 当有3个线程 pool.execute(target); 执行的业务代码的时候。线程数量是3
此时再添加5个线程 pool.execute(target); 执行的业务代码的时候 因为还没有达到最大队列数5 所以此时线程数量仍然是3
此时再添加1个线程 开始 创建临时线程。 因为临时线程数量最大为2
当临时线程超过2的时候 开始拒绝策略
标签:execute,Runnable,target,任务,线程,public,pool From: https://www.cnblogs.com/popopopopo/p/16938044.html