线程堵塞
来源:互联网 发布:淘宝客服管理制度 编辑:程序博客网 时间:2024/04/27 15:00
线程堵塞
堵塞状态是前述四种状态中最有趣的,值得我们作进一步的探讨。线程被堵塞可能是由下述五方面的原因造
成的:
(1) 调用sleep(毫秒数),使线程进入“睡眠”状态。在规定的时间内,这个线程是不会运行的。
(2) 用suspend()暂停了线程的执行。除非线程收到resume()消息,否则不会返回“可运行”状态。
(3) 用wait()暂停了线程的执行。除非线程收到nofify()或者notifyAll()消息,否则不会变成“可运行”
(是的,这看起来同原因2 非常相象,但有一个明显的区别是我们马上要揭示的)。
(4) 线程正在等候一些IO(输入输出)操作完成。
(5) 线程试图调用另一个对象的“同步”方法,但那个对象处于锁定状态,暂时无法使用。
亦可调用yield()(Thread 类的一个方法)自动放弃CPU,以便其他线程能够运行。然而,假如调度机制觉
得我们的线程已拥有足够的时间,并跳转到另一个线程,就会发生同样的事情。也就是说,没有什么能防止
调度机制重新启动我们的线程。线程被堵塞后,便有一些原因造成它不能继续运行。
下面这个例子展示了进入堵塞状态的全部五种途径。它们全都存在于名为Blocking.java 的一个文件中,但
在这儿采用散落的片断进行解释(大家可注意到片断前后的“Continued”以及“Continuing”标志。利用第
17 章介绍的工具,可将这些片断连结到一起)。首先让我们看看基本的框架:
堵塞状态是前述四种状态中最有趣的,值得我们作进一步的探讨。线程被堵塞可能是由下述五方面的原因造
成的:
(1) 调用sleep(毫秒数),使线程进入“睡眠”状态。在规定的时间内,这个线程是不会运行的。
(2) 用suspend()暂停了线程的执行。除非线程收到resume()消息,否则不会返回“可运行”状态。
(3) 用wait()暂停了线程的执行。除非线程收到nofify()或者notifyAll()消息,否则不会变成“可运行”
(是的,这看起来同原因2 非常相象,但有一个明显的区别是我们马上要揭示的)。
(4) 线程正在等候一些IO(输入输出)操作完成。
(5) 线程试图调用另一个对象的“同步”方法,但那个对象处于锁定状态,暂时无法使用。
亦可调用yield()(Thread 类的一个方法)自动放弃CPU,以便其他线程能够运行。然而,假如调度机制觉
得我们的线程已拥有足够的时间,并跳转到另一个线程,就会发生同样的事情。也就是说,没有什么能防止
调度机制重新启动我们的线程。线程被堵塞后,便有一些原因造成它不能继续运行。
下面这个例子展示了进入堵塞状态的全部五种途径。它们全都存在于名为Blocking.java 的一个文件中,但
在这儿采用散落的片断进行解释(大家可注意到片断前后的“Continued”以及“Continuing”标志。利用第
17 章介绍的工具,可将这些片断连结到一起)。首先让我们看看基本的框架:
- 线程堵塞
- Messgaebox线程堵塞
- 记一次线程堵塞
- UI线程堵塞
- 线程堵塞概念
- Java线程:堵塞队列与堵塞栈
- Java线程为何会堵塞?
- Date().getTime()线程堵塞问题
- delphi假死线程堵塞解决办法
- weblogic 下面java 线程的堵塞
- 碰上usleep导致线程堵塞的问题
- ibatis maxTransactions 参数配置致使线程堵塞
- 分析storm各个线程堵塞原因
- Java中的线程状态之堵塞
- 碰上usleep导致线程堵塞的问题
- swftools转换文件时线程堵塞问题的解决方法
- swftools转换文件时线程堵塞问题的解决方法
- Android AsyncTask中后台线程堵塞的原因分析
- JQUERY 常用方法总结
- HDU1879--继续畅通工程
- java中join(),yield(),sleep()以及wait()的区别(转)
- 第九周项目1:Complex类
- oracle 存储过程
- 线程堵塞
- Spring 线程池使用
- 特殊的队列:BlockingQueue 使用(转)
- java JVM 加载类的顺序
- Tomcat源码下载
- 线程并发
- List对象排序通用方法(转)
- DataGridview中DataGridViewComboBoxColumn数据绑定的问题
- jquery 实现弹出层插件