JAVA单排日记-2020/1/18-3-多线程_线程状态

1.线程状态概述

  • 6中状态
    在这里插入图片描述

  • 新建状态new

  • 阻塞状态Blocked
    在这里插入图片描述

  • 运行状态Runnable

  • 死亡状态Teminated

  • 休眠(计时等待)状态Timed Waiting
    在这里插入图片描述

  • 无线等待状态Waiting

2.等待wait()唤醒notify()

在这里插入图片描述

锁对象.wait(); 上锁
锁对象.notify(); 解锁
public class DemoWaiting {
    public static void main(String[] args) {
        //创建锁对象
        Object obj = new Object();

        Thread guke = new Thread() {
            @Override
            public void run() {
                while (true) {
                        System.out.println("顾客:老板,来五个包子!");
                    synchronized (obj) { //吃包子和做包子不能同时进行,所以用synchronized(锁对象)
                        try {//顾客吃包子要等老板做包子以后,所以进入Waiting状态,等待老板notify唤醒
                            obj.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    System.out.println("顾客:谢谢老板,开吃了!");//唤醒之后的顾客开始吃包子
                    System.out.println("=======================================================");
                }
            }
        };

        Thread laoban = new Thread() {
            @Override
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (obj) {//吃包子和做包子不能同时进行,所以用synchronized(锁对象) synchronized (obj) {//吃包子和做包子不能同时进行,所以用synchronized(锁对象)
                        System.out.println("5s之后");
                        System.out.println("老板:包子好了!");
                        obj.notify();//做好包子以后用notify唤醒顾客,吃包子
                    }
                }
            }
        };

        guke.start();
        laoban.start();
    }
}

在这里插入图片描述

发布了90 篇原创文章 · 获赞 1 · 访问量 2043

猜你喜欢

转载自blog.csdn.net/wangzilong1995/article/details/104044119
今日推荐