首页 > 编程语言 >Java线程池

Java线程池

时间:2024-04-04 15:58:52浏览次数:15  
标签:Java 创建 任务 线程 new public ThreadPoolExecutor

1.线程池

Java线程池是Java并发编程中非常重要的一部分,它允许我们创建和管理一组线程,这些线程可以执行提交给线程池的任务。优点如下:

优点描述
降低资源消耗通过重复利用已创建的线程,避免频繁创建和销毁线程带来的性能开销
提高响应速度当任务到达时,任务可以不需要等到线程创建就能立即执行
提高线程的可管理性线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性。使用线程池可以进行统一的分配、调优和监控

2.Executors类

(1)Executors类的作用
线程池的工具类通过调用方法返回不同类型的线程池对象

(2)Executors类常用方法

方法描述
public static ExecutorService newCachedThreadPool()创建一个缓存线程池,其线程数量几乎是无限的,当线程处于空闲状态超过60秒,就会被自动回收
public static ExecutorService newFixedThreadPool(int nThreads)创建一个固定大小的线程池,其核心线程数和最大线程数都是指定的固定值
public static ExecutorService newSingleThreadExecutor()创建一个单线程线程池,只有一个线程执行任务,所有任务按照提交顺序依次执行
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)创建一个支持定时及周期性任务执行的线程池

3.线程池代码案例

public class MyThread implements Runnable{
    @Override
    public void run() {
        for(int i = 0; i < 3; i++){
            System.out.println(Thread.currentThread().getName() + "执行第" + i + "次输出");
        }
    }
}
public class Demo {
    public static void main(String[] args) {
        // 获取线程池对象
        ExecutorService threadPool = Executors.newFixedThreadPool(2);
        // 向线程池提交任务
        threadPool.submit(new MyThread());
        threadPool.submit(new MyThread());
        threadPool.submit(new MyThread());
        // 关闭线程池
        threadPool.shutdown();
    }

4.自定义线程池

(1)线程池的主要参数

参数描述约束
corePoolSize核心线程数,核心线程处于空闲状态,也不会被销毁不能小于0
maximumPoolSize线程池允许的最大线程数大于等于核心线程数量
keepAliveTime当线程数大于核心线程数时,这是多余的空闲线程在终止前等待新任务的最长时间不能小于0
unitkeepAliveTime的时间单位,通常是TimeUnit.SECONDS用TimeUnit指定
workQueue用于保存等待执行的任务的阻塞队列不能为null
ThreadFactory用于创建新线程的线程工厂,可以通过它自定义线程的创建方式不能为null
RejectedExecutionHandler当线程池无法处理新任务时(即任务队列已满,且线程池中的线程数已达到最大值),该处理器会定义处理策略不能为null

(2)临时线程的创建时期
核心线程都在处理任务且任务阻塞队列已满

(3)任务拒绝策略

任务拒绝策略说明
ThreadPoolExecutor.AbortPolicy默认策略,丢弃任务并抛出RejectedExecutionException异常
ThreadPoolExecutor.DiscardPolicy丢弃任务,但是不抛出异常(不推荐)
ThreadPoolExecutor.DiscardOldestPolicy抛弃队列中等待最久的任务,然后把当前任务加入到队列中
ThreadPoolExecutor.CallerRunsPolicy调度任务的run()方法绕过线程池直接执行

(4)自定义线程池代码案例

		ThreadPoolExecutor pool = new ThreadPoolExecutor(
                3, // 核心线程数
                5, // 最大线程数
                60, // 存活时间(值)
                TimeUnit.SECONDS, // 时间单位
                new ArrayBlockingQueue<>(3), // 阻塞队列
                Executors.defaultThreadFactory(), // 线程工厂
                new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
        );

标签:Java,创建,任务,线程,new,public,ThreadPoolExecutor
From: https://blog.csdn.net/Lyhdreamer/article/details/137370058

相关文章

  • 认识线程、创建线程写法
    认识线程1.为什么需要线程2.如何理解线程线程是进程的一部分,一个pcb结构体描述一个线程,多个pcb结构体对象(多个线程)串起来等于一个进程  3.为什么说线程比进程创建/销毁开销小? 4.进程和线程之间的区别与联系1.进程包含线程!一个进程里面可以有一个......
  • 基于Java语言校园快递代取系统的设计与实现论文
    摘要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本校园快递代取系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理......
  • 韩顺平老师java坦克大战一些需要用到的东西(音乐文件、爆炸图片、音乐代码)(免费的!!!)
    首先非常感谢韩顺平老师的这个项目,虽然断断续续的完成了,但是收获很大,很有帮助。我的这些资源也是从别人那个弄来的,但是这个是整合版的。//音乐播放代码importjavax.sound.sampled.*;importjava.io.*;publicclassPlayAudioextendsThread{privateStringfi......
  • Java游戏开发基础:从零开始搭建自己的游戏之《人生重开模拟器》简易版
    一、引言人生重开模拟器游戏是一种虚拟角色扮演游戏,玩家通过控制一个虚构的角色,体验与现实生活中不同的选择和结果。玩家的决策将影响角色的生活轨迹,包括他们的职业生涯、社交关系、健康和财富等方面。游戏的乐趣在于提供了一个虚拟的沙盒环境,玩家可以尝试不同的生活选择,而......
  • Java反射用途以及实现原理
    Java中的反射是一种强大的机制,允许程序在运行时访问和操作类、接口、字段和方法的信息。通过反射,你可以在Java程序运行时创建对象、调用方法、修改字段等,即使这些信息在编译时并不是已知的。这为Java编程提供了极大的灵活性和动态性。下面介绍一下反射的用途及实现原理:反......
  • 在Linux中,进程和线程有何作用?
    在Linux操作系统中,进程和线程都扮演着关键角色,它们的设计目的是为了支持系统的并发性和资源共享,以及提高应用程序的性能和响应能力。进程的作用:资源隔离:进程是操作系统分配资源的基本单位,每个进程都有自己独立的地址空间,包括代码段、数据段、堆和栈,这样可以防止一个进程错误......
  • 【全开源】运营版JAVA源码单商户PC源码小程序公众号APP源码_博纳软云
    运营版JAVA源码、单商户PC源码、小程序与公众号APP源码,这一系列的源码技术,仿佛一座座桥梁,连接着商家与消费者的心灵。它们以高效的性能、稳定的表现和灵活的扩展性,助力企业打造个性化的运营平台,实现商业价值的最大化。JAVA源码,作为运营版的核心,以其强大的跨平台性和安全性,为企......
  • 【全开源】多商户运营版JAVA商城小程序源码-地摊兄源码多商户源码社交电商源码_博纳软
    多商户运营版JAVA商城小程序源码-地摊兄源码多商户源码社交电商源码:开启智慧零售新篇章在数字化浪潮的推动下,智慧零售正成为新时代商业发展的重要方向。为满足广大商户的需求,我们隆重推出多商户运营版JAVA商城小程序源码——地摊兄源码,以及多商户源码和社交电商源码,助您轻松开......
  • idea异常:java.nio.charset.MalformedInputException: Input length = 1
    先放图吧,一般idea设置成这样都能解决写在后面:MalformedInputException是格式错误输入异常,意思就是指你的项目、配置文件编码不统一,所以我们要统一成UTF-8。一般小项目,肯定按照上图设置就没问题了,大项目文件多,特别是读属性这块,如果排查都没问题的话,可以重启项目,或者clean一下。......
  • java毕业设计基于微信小程序的小型图书管理系统[附源码]
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义随着移动互联网技术的飞速发展,智能手机已经成为人们日常生活不可或缺的一部分。微信小程序作为一种新型的应用形式,因其无需下载安装、使用方便、功能丰富等特点,受......