java线程池(笔记)

线程池工作原理

JVM先根据用户的参数创建一定数量的可运行的线程任务,并将其放入队列中,在线程创建后启动这些任务,如果线程数量超过了最大线程数量(用户设置的线程池大小),则超出数量的线程排队等候,在有任务执行完毕后,线程池调度器会发现有可用的线程,进而再次从队列中取出任务并执行。
线程池的主要作用是线程复用、线程资源管理、控制操作系统的最大并发数,以保证系统高效(通过线程资源复用实现)且安全(通过控制最大线程并发数实现)地运行。

线程池的核心组件和核心类

java线程池主要由以下4个核心组件组成

  • 线程池管理器:用于创建并管理线程池
  • 工作线程:线程池中执行具体任务的线程
  • 任务接口:用于定义工作线程的调度和执行策略,只有线程实现了该接口,线程中的任务才能够被线程池调度。
  • 任务队列: 存放待处理的任务,新的任务将会不断被加入队列中,执行完成的任务将从队列中移除。

线程复用

1.线程与Runnable接口:

  • 在java中,'thread’类代表一个线程。每个线程都有一个’start’方法,用于启动线程。
  • 当调用‘start’方法时,java虚拟机会自动调用该线程的’run’方法。
  • 'Runnable’接口只有一个方法:‘run’。'Runnable’对象表示一个可以由线程执行的任务。
    2.继承Thread类并重写run方法:
  • 通常,我们可以通过继承’Thread‘类并重写它的’run‘方法,来定义线程执行的任务。
  • 但是,更好的做法是实现’Runnable‘接口,把任务放在”Runnable’的‘run’方法中,然后将这个“Runnable”对象传递给"Thread"的构造函数来创建线程。

java线程池的工作流程

在这里插入图片描述

线程池的拒绝策略

JDK内置的拒绝策略有AbortPolicy、CallerRunsPolicy、DiscardO1destPolicy、DiscardPolicy这四种,

1.AbortPolicy
AbortPolicy直接抛出异常,阻止线程正常运行。
2.CallerRunsPolicy
CallerRunsPolicy的拒绝策略为:如果被丢弃的线程任务未关闭,则执行该线程任务。

常用线程池

  • newCachedThreadPool 可缓存的线程池
  • newFixdThreadPool 固定大小的线程池
  • newScheduledThreadPool 可做任务调度的线程池
  • newSingleThreadExecutor 单个线程的线程池
  • newWorkStealingPool 足够大小的线程池

线程的生命周期

线程的生命周期:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)五种状态。
在系统运行过程中不断有新的线程被创建,旧的线程在执行完毕后被清理,线程在排队获取共享资源或者锁时被阻塞,因此运行中的线程会在就绪、阻塞、运行状态之间来回切换。线程的具体状态转化流程如图3-4所示:
在这里插入图片描述
其流程如下:
(1)调用new方法新建一个线程,这时线程处于新建状态。
(2)调用Start方法启动一个线程,这时线程处于就绪状态。
(3)处于就绪状态等待线程获取cpu资源,在等待其获取CPU资源后线程会执行run方法进入运行状态。
(4)正在运行的线程在调用了yield方法或失去处理器资源时,会再次进入就绪状态。
(5)正在执行的线程在执行了sleep方法、I/O阻塞、等待同步锁、等待通知、调用suspend方法等操作后,会挂起并进入阻塞状态,进入Blocked池。
(6)阻塞状态的线程由于出现Sleep时间已到、I/O方法返回、获得同步锁、收到通知、调用resume方法等情况。
(7)处于运行状态的线程,在调用run方法或call方法正常执行完成、调用stop方法停止线程或者程序执行错误导致异常退出时,会进入死亡状态。

  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值