Java并发之ThreadPoolExecutor 线程执行服务
时间:2022-07-24
本文章向大家介绍Java并发之ThreadPoolExecutor 线程执行服务,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 package com.thread.test.thread;
2
3 import java.util.concurrent.ExecutorService;
4 import java.util.concurrent.LinkedBlockingQueue;
5 import java.util.concurrent.RejectedExecutionHandler;
6 import java.util.concurrent.ThreadLocalRandom;
7 import java.util.concurrent.ThreadPoolExecutor;
8 import java.util.concurrent.TimeUnit;
9
10 /**
11 * ThreadPoolExecutor
12 * 通过线程池执行所提交的任务的ExecutorService,通常由Executors生成
13 * 执行高并发任务比较高效,因为减少了任务的穿行等待时间,同时很好的管理着执行需求的资源,包括线程,
14 * 通常,维护者一些基础的任务执行数据,例如已完成任务数量
15 *
16 * ThreadPoolExecutor有许多可调正的参数,可以适用于不同的用途,但是通常我们使用
17 * Executors#newCachedThreadPool 无容量限制,线程自动回收
18 * Executors#newFixedThreadPool 固定容量线程池
19 * Executors#newSingleThreadExecutor 单线程
20 * 等为许多通用场景预置了很多参数,
21 *
22 * Hello world!
23 *
24 */
25 public class ThreadPoolFactoryTest
26 {
27 public static void main( String[] args )
28 {
29 /**
30 * @ int corePoolSize:线程池中维护的线程数量,生命周期同线程池,除非设置了allowCoreThreadTimeOut
31 * @ int maximumPoolSize:允许的最大数量
32 * @ long keepAliveTime:允许的最大存活时间
33 * @ TimeUnit unit:单位
34 * @ BlockingQueue<Runnable> workQueue:存储等待执行任务,execute提交的Runnable类型任务
35 * @ RejectedExecutionHandler handler:线程阻塞,队列已满时执行的操作
36 */
37 ExecutorService enew = new ThreadPoolExecutor(5, 20, 0L,
38 TimeUnit.SECONDS,
39 new LinkedBlockingQueue<Runnable>(),
40 new RejectedExecutionHandler() {
41 public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
42 System.out.println("this is the exception execution begin");
43 executor.execute(r);
44 System.out.println("this is the exception execution end");
45 }
46 });
47
48 for (int i = 0; i < 100; i++) {
49 enew.execute(new Runnable() {
50 public void run() {
51 int l = ThreadLocalRandom.current().nextInt();
52 System.out.println("task..." + l + "begin");
53 try {
54 Thread.sleep(2000);
55 System.out.println("task..." + l + "end");
56 } catch (InterruptedException e) {
57 e.printStackTrace();
58 }
59 }
60 });
61 }
62 System.out.println("add end...");
63 }
64 }
项目地址:https://github.com/windwant/windwant-demo/tree/master/thread-demo
- 分享博客统计中的动态运行天数代码
- GO语言标准错误处理机制error用法实例
- go的websocket实现原理与用法详解
- 分享张戈博客的在线影音源代码
- go语言base64加密解密的方法
- Oracle 12c数据库优化器统计信息收集的最佳实践(一)
- Go语言轻量级线程Goroutine用法实例
- 仿异次元百度分享工具条张戈修改版
- Go语言的队列和堆栈实现方法
- 妹子你真萌:一次心惊肉跳的服务器误删文件的恢复过程
- Go语言使用sort包对任意类型元素的集合进行排序的方法
- Oracle 12c ASM专题|Flex Diskgroup相关概念
- 移动搜索SEO分享:利用Meta声明来做百度开放适配
- 百度分享无法抓取图片及摘要的折中解决办法
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释