java-线程的状态
线程转台:
Timed Waiting (计时等待)
BLOCKED锁阻塞
Waiting无限等待
例子
/* 等待唤醒案例:线程之间的通信 传教一个消费者线程:调用wait方法 等待包子做好,进入WAITING状态 创建一个生产者:调用notify方法,做好包子后唤醒消费者线程 注意: 消费者和生产者线程必须使用同步代码块包裹起来,保证等待胡唤醒只能有一个执行 同步使用的锁对象,必须保证是唯一的 只有锁对象才能调用wait 和 notify方法 java.lang.Object void notify()唤醒正在等待对象监视器的单个线程 会继续执行wait方法之后的代码 void wait() 导致当前线程等待, */
代码:
public class DemoWaitingAndNotify { public static void main(String[] args) { //传教锁对象 Object ob = new Object(); //创建消费者进程 new Thread(){ @Override public void run() { //保证等待和唤醒的线程只能有一个执行,是用锁对象 synchronized (ob){ System.out.println("消费者卖包子 "); try { ob.wait(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("吃到了"); } } }.start(); //创建生产者线程 new Thread(){ @Override public void run() { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } // //保证等待和唤醒的线程只能有一个执行,是用同一个锁对象 synchronized (ob){ System.out.println("做好包子了"); ob.notify(); } } }.start(); } }