浅析Java中的阻塞
2016-06-15 18:41
302 查看
所谓的阻塞,就是线程能够运行,但是某个条件阻止它的运行,当线程处于阻塞状态时,调度器将忽略线程,不会分配给线程任何CPU时间,直到线程重新进入就绪状态,它才有可能执行操作。
所谓的就绪,就是可运行也可不运行,只要调度器分配时间片给线程,线程就可以运行,因为我们都知道,调度器是如何分配线程,是不确定的。
为什么任务会进入阻塞的状态,一般有以下几个原因:
1.通过调用sleep(milliseconds)使任务进入休眠状态,在这种情况下,任务在指定的时间内不会运行;
2.通过调用wait()使线程挂起,直到线程得到了notify()或notifyAll()消息(或者java SE5的java.util.concurrent类库中等价的signal()或signalAll()),线程才会进入就绪状态;
3.任务在等到某个输入或输出完成;
4.任务试图在某个对象上调用其同步控制方法。
所谓的就绪,就是可运行也可不运行,只要调度器分配时间片给线程,线程就可以运行,因为我们都知道,调度器是如何分配线程,是不确定的。
为什么任务会进入阻塞的状态,一般有以下几个原因:
1.通过调用sleep(milliseconds)使任务进入休眠状态,在这种情况下,任务在指定的时间内不会运行;
2.通过调用wait()使线程挂起,直到线程得到了notify()或notifyAll()消息(或者java SE5的java.util.concurrent类库中等价的signal()或signalAll()),线程才会进入就绪状态;
3.任务在等到某个输入或输出完成;
4.任务试图在某个对象上调用其同步控制方法。
相关文章推荐
- Struts2的国际化入门
- Java 对象和类
- 对一致性Hash算法,Java代码实现的深入研究
- 几种简单的负载均衡算法及其Java代码实现
- 浅析Java中的Thread
- Java以UTF-8编码读写文件
- Java多线程21:多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask
- Java Thread 多线程 介绍
- Java多线程20:多线程下的其他组件之CountDownLatch、Semaphore、Exchanger
- Java多线程19:定时器Timer
- Java多线程18:线程池
- Java多线程17:中断机制
- springmvc入门基础之注解和参数传递
- java 求md5值,即md5加密算法
- Java多线程16:线程组
- Java多线程14:生产者/消费者模型
- Java多线程13:读写锁和两种同步方式的对比
- Java多线程12:ReentrantLock中的方法
- Java多线程11:ReentrantLock的使用和Condition
- <Introduction to Java Programming> Note 02