线程状态: 一个线程可以处于以下几个状态: 1.新建(new):线程对象已经建立,但它还没有启动,所以它不能运行。 2.就绪(runnable):只要调度程序将时间片分配给它,它就可以运行。 3.死亡(dead):从run()方法返回。 4.阻塞(blocked):线程能够运行,但有某个条件阻止它运行,当线程处于阻塞状态,调度机制将忽略线程,不会分配给线程任何处理器时间。知道线程重新进入就绪状态。 进入阻塞状态的四个原因: 1.你通过调用sleep是线程进入休眠状态。 2.你通过调用wait()将线程挂起,知道线程得到了notify()或notifyAll()消息,线程才会进入就绪状态。 3.线程在等待某个输入/输出完成。 4.线程试图在某个对象上调用其同步控制方法,但是对象锁不可用。 下面是一个线程间合作的例子:
以上的例子,模拟的是一个流水线,工人生产产品,销售人员提走产品,我们假设一天只要9个产品就够了。我们可以看到当Saler没有可提取的产品时,它将阻塞自己,同事释放自己的锁,当Worker对象生产出一个产品时,它将试图获得Saler对象的锁,将其唤醒,接着Saler提取走产品。运行结果如下: