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();
    }
}

 

 

posted @ 2020-06-25 16:24  小丑quan  阅读(133)  评论(0)    收藏  举报