构建线程池参数 1.corePoolSize 核心线程数量 2.maximumPoolSize 能创建的最大线程数,最大线程数不能大于核心线程数 3.keepAliveTime 也就是当线程空闲时,所允许保存的最大时间,超过这个时间,线程将被释放销毁,但只针对于非核心线程 4.TimeUnit 时间单位,TimeUnit.MICROSECONDS等 5.workQueue 工作队列,这里有几种 5.1 ArrayBlockingQueue 基于数组的有界阻塞队列,必须设置容量,遵循先进先出原则(FIFO)对元素进行排序。 5.2 linkedBlockingQueue:一个基于链表结构的阻塞队列,可以设置容量,此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue 5.3 SynchronousQueue:一个不存储元素的阻塞队列。每个插入offer *** 作必须等到另一个线程调用移除poll *** 作,否则插入 *** 作一直处于阻塞状态,吞吐量通常要高于linkedBlockingQueue。 5.4 PriorityBlockingQueue:一个具有优先级的无限阻塞队列。 6.threadFactory 线程工厂,用于创建线程 7.handler 当线程边达到最大容量时,用于处理阻塞时的程序策略 7.1 ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。 7.2 ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。 7.3 ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程) 7.4 ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务 8.executorService.execute 执行一个实现Runnable 接口的线程 9.executorService.shutdown();停止线程池代码实例
项目 ThreadFactoryBuilder依赖
com.google.guava guava20.0
ThreadTask
package com.thread.demo.test; import com.google.common.util.concurrent.ThreadFactoryBuilder; import java.util.concurrent.*; public class ThreadTask { public static void testHospTest() { // 创建一个名为shopTest-pool-%d的线程池 ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("shopTest-pool-%d").build(); // 构建线程参数 ExecutorService executorService = new ThreadPoolExecutor(3, 3, 0l, TimeUnit.MICROSECONDS, new linkedBlockingQueue<>(3), threadFactory, new ThreadPoolExecutor.CallerRunsPolicy()); try { int a = 20; // 执行线程 executorService.execute(new Seller(a)); } catch (Exception e) { System.err.println("数值小于0"+e.getMessage()); } finally { // 停止线程池 executorService.shutdown(); } } }
Seller
这个Seller 在execute使用必须实现Runnable接口
package com.thread.demo.test; public class Seller implements Runnable { private int ticket; public Seller(int ticket) { this.ticket = ticket; } @Override public void run() { if (ticket > 0) { while (ticket > 0) { ticket--; System.out.println("你已经白嫖了" + ticket + "次"); } } else { System.err.println("输入参数有误"); } } }
测试
SellerTest
package com.thread.demo.test; public class SellerTest { public static void main(String[] args) { System.out.println("开始白嫖"); ThreadTask.testHospTest(); } }
测试结果
源码地址
https://gitee.com/FetterXxZzz/thread-factory-test.git
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)