这里写目录标题
一:线程的生命周期:
新建:当一个线程被创建的时候,新生的线程处于新建状态
就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备运行条件,只是没分配到CPU资源。
运行:当就绪的线程被调度并获得CPU资源时,边进入运行状态,run()方法定义了线程的操作和功能。
阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让CPU临时终止自己的执行,进入阻塞状态。
死亡:线程 完成它的全部工作、线程被提前强制性终止、出现异常导致结束。
二:死锁:
1.理解:
①不同线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成线程的死锁。
①出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续。
下面是比较通俗的讲解
以上代码便是出现了死锁;第一个线程拿走了s2锁,然后开始阻塞,此时第二个线程开始执行,拿走了s1锁进入阻塞。此时第一个线程阻塞时间已到,继续往下执行,结果它无法拿走s2锁,而第二个线程也是无法拿走s1锁。变回出现阻塞状态。程序既不运行,也不中断。