Java多线程

Java多线程

一、线程创建方法

  1. 继承Tread类
  2. 实现Runable接口
  3. 使用ExcutorSerivice和Callable实现有返回值的线程,返回值保存在Future对象中
  4. 基于线程池创建线程

二、线程池工作原理

线程池的主要作用:线程复用、线程管理、控制最大并发数。

  1. 线程复用:Thread类中的start方法中不断循环调用传递进来的Runable对象,而将这些对象存储到Queue中,每次循环调用Queue中的对象,即能实现复用。

  2. 线程池的核心组件关系如下:
    在这里插入图片描述

  3. 线程池工作过程如下(新线程流入步骤):
    在这里插入图片描述

  4. 线程池的拒绝策略:AbortPolicy(直接抛异常)、CallerRunsPolicy(被丢弃的线程任务未关闭,则先执行)、DiscardOldestPolicy(移除线程池中最早的一个线程任务)、DiscardPolicy(丢弃当前的线程任务不做处理)、自定义

三、常用的五种线程池

  • Executor.newCachedThreadPool
  • Executor.newFixedThreadPool
  • Executor.newScheduledThreadPool
  • Executor.newSingleThreadPool
  • Executor.newWorkStealingPool

四、线程的生命周期

五种状态:new、runable、running、block、dead
转化状态如下:
在这里插入图片描述

五、线程的基本方法

  1. wait:调用wait方法会释放锁,等到被通知或被中断后才会返回,线程进入WAITING状态
  2. sleep:不会释放当前拥有的锁,线程进入TIME-WAITING状态
  3. yield:线程让出时间片,进入就绪状态,竞争CPU时间片
  4. interrupt:不会中断一个正在运行的线程,处于running状态的线程不会因为调用了interrupt方法而终止
  5. join:等待其他线程终止,若当前线程中调用一个线程的join方法,则当前线程转为阻塞状态,等到另一个线程结束,改线程转为就绪状态竞争CPU资源
  6. notify:唤醒对象监视器上等待的一个线程(随机唤醒一个等待的线程)
  7. setDaemon:定义守护线程,为用户线程提供公共服务,可自动离开。如垃圾回收线程

不同方法对线程状态的影响如下:
在这里插入图片描述

六、终止线程的方法

  1. 正常运行结束
  2. 使用退出标志退出线程
  3. 使用interrupt方法终止线程(更改中断标志)
  4. 使用stop方法终止线程(不安全)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值