JavaSE 多线程(死锁)

一:线程的生命周期:

新建:当一个线程被创建的时候,新生的线程处于新建状态
就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备运行条件,只是没分配到CPU资源。
运行:当就绪的线程被调度并获得CPU资源时,边进入运行状态,run()方法定义了线程的操作和功能。
阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让CPU临时终止自己的执行,进入阻塞状态。
死亡:线程 完成它的全部工作、线程被提前强制性终止、出现异常导致结束。

在这里插入图片描述

二:死锁:

1.理解:

①不同线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成线程的死锁。
①出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续。

在这里插入图片描述
下面是比较通俗的讲解
以上代码便是出现了死锁;第一个线程拿走了s2锁,然后开始阻塞,此时第二个线程开始执行,拿走了s1锁进入阻塞。此时第一个线程阻塞时间已到,继续往下执行,结果它无法拿走s2锁,而第二个线程也是无法拿走s1锁。变回出现阻塞状态。程序既不运行,也不中断。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值