java中如何使用线程池
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,本篇文章给大家分享的是有关java中如何使用线程池,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。public ThreadPoolExe
千家信息网最后更新 2025年12月03日java中如何使用线程池
本篇文章给大家分享的是有关java中如何使用线程池,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueueworkQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { if (corePoolSize < 0 || maximumPoolSize <= 0 || maximumPoolSize < corePoolSize || keepAliveTime < 0) throw new IllegalArgumentException(); if (workQueue == null || threadFactory == null || handler == null) throw new NullPointerException(); this.acc = System.getSecurityManager() == null ? null : AccessController.getContext(); this.corePoolSize = corePoolSize; this.maximumPoolSize = maximumPoolSize; this.workQueue = workQueue; this.keepAliveTime = unit.toNanos(keepAliveTime); this.threadFactory = threadFactory; this.handler = handler; } 构造函数的参数含义如下:corePoolSize:指定了线程池中的线程数量,它的数量决定了添加的任务是开辟新的线程去执行,还是放到workQueue任务队列中去;maximumPoolSize:指定了线程池中的最大线程数量,这个参数会根据你使用的workQueue任务队列的类型,决定线程池会开辟的最大线程数量;keepAliveTime:当线程池中空闲线程数量超过corePoolSize时,多余的线程会在多长时间内被销毁;unit:keepAliveTime的单位workQueue:任务队列,被添加到线程池中,但尚未被执行的任务;它一般分为直接提交队列、有界任务队列、无界任务队列、优先任务队列几种;threadFactory:线程工厂,用于创建线程,一般用默认即可;handler:拒绝策略;当任务太多来不及处理时,如何拒绝任务;
package com.test;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.RejectedExecutionHandler;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class TestThreadPool { public static void main(String[] args) { /** * 线程数量 * 最大数量 超标后会进入队列、队列超标后触发策略 * * ArrayBlockingQueue 有界队列 * LinkedBlockingQueue 无界队列 * SynchronousQueue 同步队列 * * 执行线程超标策略 RejectedExecutionHandler * ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。 * ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。 * ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程) * ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务 * 自定义 * Executors.newCachedThreadPool(); //创建一个缓冲池,缓冲池容量大小为Integer.MAX_VALUE * Executors.newSingleThreadExecutor(); //创建容量为1的缓冲池 * Executors.newFixedThreadPool(int); //创建固定容量大小的缓冲池 * */ ThreadPoolExecutor pool=new ThreadPoolExecutor(5, 5, 1, TimeUnit.SECONDS, new ArrayBlockingQueue(2),new RejectedExecutionHandler() { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { System.out.println(r+"丢弃了"); } }); for(int i=0;i<7;i++) { Runnable run=new TestThread(i); pool.execute(run); } //pool.shutdown(); }}class TestThread implements Runnable { private int i; public TestThread(int i) { this.i=i; } @Override public void run() { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+" "+i); }}以上就是java中如何使用线程池,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
线程
任务
队列
数量
缓冲
最大
容量
策略
参数
大小
更多
知识
篇文章
处理
实用
函数
单位
含义
尚未
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
金山区市场软件开发品质保障
网络安全漫画简单一点点
工企数据库利润总额和利税总额
数据库后缀名
查询数据库几个实例
storm什么时候写入数据库
湖外计算机网络技术
数据库安全问题分类
有服务器和域名还需要主机吗
即时通信软件开发难度
网络安全试卷9
胖熊数据库电影
网络安全三个主要的要求
温州吉加软件开发
管理服务器tcp包重发
网络安全一百字大学生
软件开发短时间离职原因
对当下网络技术的人
id重设密码连接服务器失败
数据库错误是怎么解决
成都招聘网络技术人员
怎样锁掉oracle数据库
越秀物联网软件开发价格表
数据库中手机号的类型是什么
for循环数据库连接池
学校网络安全策略
上海参考软件开发销售
微付网络技术有限公司
群硕软件开发有限公司北京
诚信网络技术工作室