美文网首页
(转载)线程阻塞是什么?

(转载)线程阻塞是什么?

作者: duoduo7628 | 来源:发表于2021-03-11 16:57 被阅读0次

什么是线程阻塞?

在某一时刻某一个线程在运行一段代码的时候,这时候另一个线程也需要运行,但是在运行过程中的那个线程执行完成之前,另一个线程是无法获取到CPU执行权的(调用sleep方法是进入到睡眠暂停状态,但是CPU执行权并没有交出去,而调用wait方法则是将CPU执行权交给另一个线程),这个时候就会造成线程阻塞。

为什么会出现线程阻塞?

1.睡眠状态:当一个线程执行代码的时候调用了sleep方法后,线程处于睡眠状态,需要设置一个睡眠时间,此时有其他线程需要执行时就会造成线程阻塞,而且sleep方法被调用之后,线程不会释放锁对象,也就是说锁还在该线程手里,CPU执行权还在自己手里,等睡眠时间一过,该线程就会进入就绪状态,典型的“占着茅坑不拉屎”;

2.等待状态:当一个线程正在运行时,调用了wait方法,此时该线程需要交出CPU执行权,也就是将锁释放出去,交给另一个线程,该线程进入等待状态,但与睡眠状态不一样的是,进入等待状态的线程不需要设置睡眠时间,但是需要执行notify方法或者notifyall方法来对其唤醒,自己是不会主动醒来的,等被唤醒之后,该线程也会进入就绪状态,但是进入就绪状态的该线程手里是没有执行权的,也就是没有锁,而睡眠状态的线程一旦苏醒,进入就绪状态时是自己还拿着锁的。等待状态的线程苏醒后,就是典型的“物是人非,大权旁落“;

3.礼让状态:当一个线程正在运行时,调用了yield方法之后,该线程会将执行权礼让给同等级的线程或者比它高一级的线程优先执行,此时该线程有可能只执行了一部分而此时把执行权礼让给了其他线程,这个时候也会进入阻塞状态,但是该线程会随时可能又被分配到执行权,这就很”中国化的线程“了,比较讲究谦让;

4.自闭状态:当一个线程正在运行时,调用了一个join方法,此时该线程会进入阻塞状态,另一个线程会运行,直到运行结束后,原线程才会进入就绪状态。这个比较像是”走后门“,本来该先把你的事情解决完了再解决后边的人的事情,但是这时候有走后门的人,那就会停止给你解决,而优先把走后门的人事情解决了;

5.suspend() 和 resume() :挂起和恢复,这两个方法是配套使用的,suspend()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的resume() 被调用,才能使得线程重新进入可执行状态。典型地,suspend() 和 resume() 被用在等待另一个线程产生的结果的情形:测试发现结果还没有产生后,让线程阻塞,另一个线程产生了结果后,调用 resume() 使其恢复。Thread中suspend()和resume()两个方法在JDK1.5中已经废除,不再介绍。因为有死锁倾向

转载:
什么是线程阻塞?为什么会出现线程阻塞?
Java中什么方法导致线程阻塞
线程五种状态(新建、就绪、运行、阻塞、死亡)
Java多线程:死锁

相关文章

  • (转载)线程阻塞是什么?

    什么是线程阻塞? 在某一时刻某一个线程在运行一段代码的时候,这时候另一个线程也需要运行,但是在运行过程中的那个线程...

  • Java 线程状态之 blocked 和 waiting 的区别

    一、引子 synchronized 会阻塞线程,AQS 也会阻塞线程。那么这两种情况,阻塞后,线程的状态是什么,是...

  • LockSupport的用法及原理

    是什么 LockSupport是一个线程阻塞工具类,所有的方法都是静态方法,可以让线程在任意位置阻塞,当然阻塞之后...

  • iOS开发多线程--线程状态

    线程简介 线程创建 线程的开启: 线程的运行和阻塞:(1)设置线程阻塞1,阻塞2秒 (2)第二种设置线程阻塞2,以...

  • Java基础面试高频问答题

    1、什么导致线程阻塞 一般线程中的阻塞: Socket客户端的阻塞: Socket服务器的阻塞: 什么导致线程阻塞...

  • NIO编程---非阻塞式网络通信

    **版权声明:本文为小斑马伟原创文章,转载请注明出处!阻塞与非阻塞传统的IO 流都是阻塞式的。也就是说,当一个线程...

  • LinkedBlockingQueue

    一、LinkedBlockingQueue是什么?LinkedBlockingQueue是一个线程安全的阻塞队列,...

  • OKHTTP 线程 协程

    1、阻塞和挂起的区别: 线程的阻塞: 阻塞状态的线程的特点是:该线程放弃CPU的使用,暂停运行,只有等到导致阻塞的...

  • Java阻塞队列详解

    作者: 一字马胡 转载标志 【2017-11-03】 更新日志 阻塞队列 阻塞队列是一种队列,一种可以在多线程环...

  • J.U.C之LockSupport:线程等待和唤醒

    1 LockSupport 概述 LockSupprot是线程的阻塞原语,用来阻塞线程和唤醒线程。每个使用Lock...

网友评论

      本文标题:(转载)线程阻塞是什么?

      本文链接:https://www.haomeiwen.com/subject/rjpnqltx.html