阻塞、挂起和睡眠

挂起和阻塞是进程或线程执行中的两种状态,主动挂起会释放CPU但不释放锁,常因内存不足或用户请求;阻塞则在等待事件发生时释放CPU和锁。睡眠是Thread.sleep方法造成的线程暂停,保持在内存中且不释放资源。挂起需激活,阻塞需唤醒。
摘要由CSDN通过智能技术生成

以下是线程的各个状态:

img

  1. 主动和被动:
    • 挂起:主动触发。通常是由于内存不足或者用户/系统的主动执行,用于等待外部的某个条件满足时再继续执行。挂起状态需要主动恢复;
    • 睡眠:主动触发。通常由程序员主动设置,用于在特定的时间后自动恢复进程/线程的执行;
    • 阻塞:被动触发。通常是因为进程/线程在等待某个事件(比如:等待响应)或资源而暂时无法继续执行。阻塞状态在资源得到满足后会自动恢复;
  2. 资源占用:
    • 挂起:进程/线程移动到磁盘上,不占用 CPU,其他任务可以执行,不释放锁;
    • 睡眠:进程/线程既占用内存资源,又占用 CPU,导致 CPU 的使用大幅度降低,不释放锁;
    • 阻塞:进程/线程保留在内存中,不占用 CPU,其他任务可以执行,释放锁;
  3. 恢复时机:
    • 挂起:挂起的进程/线程需要由挂起它的对象(用户、系统)在时机符合时将其主动激活;
    • 睡眠:睡眠的进程/线程在睡眠时间截止后就会恢复;
    • 阻塞:阻塞的的进程/线程在等待的资源得到满足自动恢复;
  4. 应用场景:
    • 挂起:常常用于程序调试中的条件中断,或在多线程/多进程的环境下的并发操作中控制并发操作和资源分配;
    • 睡眠:常用于实现延迟、轮询等功能;
    • 阻塞:多用于网络编程、I/O 操作等需要等待外部事件或资源的场景中;

挂起和阻塞的本质在于:正在执行的进程/线程,因为某些原因主动/被动的释放 CPU,暂停执行。

睡眠:Thread.sleep(long),是 Thread 的静态方法,可以使当前线程睡眠,线程仍在内存中,即不会释放 CPU 也不会释放锁。

阻塞、挂起和睡眠

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值