百度网站地图制作,片多多可以免费看电视剧吗,90平方设计,广告设计制作公司经营范围为什么会出现线程阻塞#xff1f;
1.睡眠状态#xff1a;当一个线程执行代码的时候调用了sleep方法后#xff0c;线程处于睡眠状态#xff0c;需要设置一个睡眠时间#xff0c;此时有其他线程需要执行时就会造成线程阻塞#xff0c;而且sleep方法被调用之后#xff0c;…为什么会出现线程阻塞
1.睡眠状态当一个线程执行代码的时候调用了sleep方法后线程处于睡眠状态需要设置一个睡眠时间此时有其他线程需要执行时就会造成线程阻塞而且sleep方法被调用之后线程不会释放锁对象也就是说锁还在该线程手里CPU执行权还在自己手里等睡眠时间一过该线程就会进入就绪状态典型的“占着茅坑不拉屎”
2.等待状态当一个线程正在运行时调用了wait方法此时该线程需要交出CPU执行权也就是将锁释放出去交给另一个线程该线程进入等待状态但与睡眠状态不一样的是进入等待状态的线程不需要设置睡眠时间但是需要执行notify方法或者notifyall方法来对其唤醒自己是不会主动醒来的等被唤醒之后该线程也会进入就绪状态但是进入仅需状态的该线程手里是没有执行权的也就是没有锁而睡眠状态的线程一旦苏醒进入就绪状态时是自己还拿着锁的。等待状态的线程苏醒后就是典型的“物是人非大权旁落“
3.礼让状态当一个线程正在运行时调用了yield方法之后该线程会将执行权礼让给同等级的线程或者比它高一级的线程优先执行此时该线程有可能只执行了一部分而此时把执行权礼让给了其他线程这个时候也会进入阻塞状态但是该线程会随时可能又被分配到执行权这就很”中国化的线程“了比较讲究谦让
4.自闭状态当一个线程正在运行时调用了一个join方法此时该线程会进入阻塞状态另一个线程会运行直到运行结束后原线程才会进入就绪状态。这个比较像是”走后门“本来该先把你的事情解决完了再解决后边的人的事情但是这时候有走后门的人那就会停止给你解决而优先把走后门的人事情解决了
5.suspend() 和 resume() 这两个方法是配套使用的suspend() 是让线程进入阻塞状态它的解药就是resume()没有resume()它自己是不会恢复的由于这种比较容易出现死锁现象所以jdk1.5之后就已经被废除了这对就是相爱相杀的一对 。 转载链接https://blog.csdn.net/sunshine_2211468152/article/details/87299708