【Java并发体系】线程基础

本文详细介绍了线程的基础概念,包括线程的出现背景、生命周期、启动与终止方式,以及线程的应用场景,如多线程流水线和线程池等。深入探讨了线程在多核CPU环境下并行执行的优势,以及线程状态转换的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程的出现
  • 在多核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接口
      • 可判断线程是否完成
      • 能够中断任务
      • 能够获取任务执行结果
线程的应用场景
  • 多线程流水线(任务之间有依赖关系)
    • 将一个任务分解成多个执行流程,每个执行流程创建一个线程;
    • 存储待执行的任务列表
    • 提交任务只需要向第一个执行线程提交,责任链模式会将执行完成的任务加入下一个任务队列中
  • 线程池,创建新线程执行(任务没有依赖关系)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值