【Java并发体系】线程基础

线程的出现
  • 在多核CPU,多线程可以真正意义上并行执行
  • 线程是CPU最小的调度基本单位
  • 线程的创建,销毁比进程快
  • 当进程存在多个同时执行的互不依赖任务,当一个任务被阻塞会导致其他任务也无法执行
线程生命周期
  • 线程状态图
    • NEW:初始新建状态,还未调用start(),向操作系统提交创建线程,分配资源
    • RUNNABLED:可运行状态(可能在运行中)
      • yield =)释放cpu退让给同等优先级之上的线程,不释放锁资源,线程状态不变RUNNING -) RUNNABLED
    • BLOCKED:同步阻塞,线程进入临界区阻塞队列:synchronized
    • WAITING:等待阻塞
      • LockSupport.park =) unpark解除
      • wait =) notify,notifyAll
      • join =) 本质是wait
    • TIME_WAITING:超时等待
      • LockSupport.parkNaos,partUtil =) unpark解除
      • wait(long) =)noyify,notifyAll
      • join(long)
      • Thread.sleep
    • TERMINATED:线程运行终止
      在这里插入图片描述
线程的启动,终止(中断)
  • start() 启动
  • 优雅终止线程
    • stop() ,suspend()控制线程状态,已被弃用(容易导致资源不正确释放)
    • interrput:每个线程都拥有中断标志位
      • Thread.interrupted(),会清除中断位(因为中断标志位只能线程自己清除)
      • 调用IsInterrupted()判断是否中断(不清除中断位)
      • 线程在Runnabled时,只标记中断标志位
      • 线程在WAITTING,TIME_WAITTING时,发送中断位标志时会立即进入同步阻塞队列(或者sleep会直接进入RUNNABLE)
线程的应用
  • 继承Thread重写run
  • 实现Runable接口
  • 实现Callable,FutureTask包装
    • FutureTask继承Future接口
    • Future接口
      • 可判断线程是否完成
      • 能够中断任务
      • 能够获取任务执行结果
线程的应用场景
  • 多线程流水线(任务之间有依赖关系)
    • 将一个任务分解成多个执行流程,每个执行流程创建一个线程;
    • 存储待执行的任务列表
    • 提交任务只需要向第一个执行线程提交,责任链模式会将执行完成的任务加入下一个任务队列中
  • 线程池,创建新线程执行(任务没有依赖关系)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值