千家信息网

java中如何使用线程池

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,本篇文章给大家分享的是有关java中如何使用线程池,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。public ThreadPoolExe
千家信息网最后更新 2025年01月24日java中如何使用线程池

本篇文章给大家分享的是有关java中如何使用线程池,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

public ThreadPoolExecutor(int corePoolSize,                              int maximumPoolSize,                              long keepAliveTime,                              TimeUnit unit,                              BlockingQueue workQueue,                              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安全错误 数据库的锁怎样保障安全 数据库系统的管理功能有哪些 趣链科技参加互联网大会 做代码要服务器搭建吗 内网穿透数据库速度 传感器网络技术通信技术 无线网络技术课程设计 计算机控制网络技术课后答案 软件开发项目文档提纲参考 池州安卓软件开发外包公司 不懂软件开发怎么做产品 服务器停电后进不去系统 国家网络安全比赛获奖 英特尔服务器装系统卡住 小学网络安全 青浦区网络软件开发服务收费 数据库在建好表后设置主键 intel 服务器芯片制造 数据库月份去重 网络安全工程师在哪里可以学习 华为网络安全认证图片 虚拟主机和云服务器有什么区别 数据库编辑行数过多无法保存 软件开发变更流程图 世界网络安全新闻 网络安全管理法四十六 数据库表列的数据类型 杭州仕佳网络技术官网 因式分解视频软件开发 外卖订餐管理系统数据库源码 数据库设计包括哪几种设计阶段
0