线程、线程池

一、java线程的6种状态

1.初始状态(NEW)

线程被创建,但是还没有运行start方法

2.运行状态(RUNNABLE)

JAVA线程将操作系统中的就绪和运行两种状态统一称为运行中


3.阻塞状态(BLOCKED)


4.等待状态(WAITING)
等待状态,没有时间限制,要被其他线程唤醒或者有其他的唤醒操作
执行wait、join

5.超时等待(TIME_WAITING)
有等待时间,超时自动返回
执行sleep,带参数的wait

6.终止(TEMINATED)
代表线程执行完毕

二、sleep()、wait()、join()的区别

1.sleep()方法需要指定等待的时间,不会释放锁标志,是Thread的静态方法

2.wait()方法,和notify()及notifyAll()一起协调对共享数据的存取,都是Object类的方法,wait()方法会释放锁标志


3.join(),主线程等待子线程的终止,如果主线程需要知道子线程的执行结果时,可以使用该方法

三、创建线程的三种方式

1.继承Thread类


2.实现Runnable接口


3.实现Callable接口

四、线程池的参数

1.corePoolSize(核心线程数):线程池中始终保持的活动线程数量。即使这些线程处于空闲状态,也不会被回收,除非线程池被关闭。必传

2.maximumPoolSize(最大线程数):线程池允许的最大线程数量,包括核心线程和临时线程。当任务数量超过核心线程数并且工作队列已满时,线程池会创建新的临时线程,直到达到最大线程数。必传

3.keepAliveTime(线程空闲时间):非核心线程在空闲状态下被保留的最长时间。超过这个时间,多余的线程将被终止,以便减少资源消耗。不必传

4.unit(时间单位):用于定义keepAliveTime的时间单位,通常是TimeUnit.MILLISECONDS(毫秒)等。不必传

5.workQueue(工作队列):用于保存等待执行的任务的队列。可以是各种类型的队列,如LinkedBlockingQueue、ArrayBlockingQueue等。必传

6.threadFactory(线程工厂):用于创建新线程的工厂。你可以自定义线程工厂来控制线程的创建过程。必传

7.handler(拒绝策略):当工作队列已满且线程池中的线程数量达到最大值时,新提交的任务将被拒绝执行的策略。必传

常见的拒绝策略有ThreadPoolExecutor.AbortPolicy(默认,抛出异常)、ThreadPoolExecutor.CallerRunsPolicy(在提交任务的线程中直接执行任务)、ThreadPoolExecutor.DiscardPolicy(默默丢弃任务)、ThreadPoolExecutor.DiscardOldestPolicy(丢弃最旧的任务)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值