美文网首页
线程笔记三(线程的睡眠和唤醒)

线程笔记三(线程的睡眠和唤醒)

作者: There_7f76 | 来源:发表于2019-10-19 18:53 被阅读0次

    线程笔记三(线程的睡眠和唤醒)

    1.线程流程图:

    线程流程图.png

    2.线程的状态

    1. New(新建状态):Threadn thread =new Thread();但是没有通过thread.start()调用;

    2. Runnable(可以运行的状态):线程已经启动可以运行的,在JVM虚拟机里面是处于运行的状态的

    3. Blocked(锁阻塞):当线程试图获取一个锁对象时,而锁对象被其他的线程持有,则该线程进入Blocked状态,只有当该线程持有锁时,才会编程Runnable状态。

    4. Waiting(无线等待状态):一个线程在等待另外一个线程执行一个(唤醒)动作时,该线程进入Waiting状态后是不能自动唤醒的,必须等待另外一个线程调用notify或者notifyAll方法才能唤醒。

      1. 线程等待的方法

         void wait() //在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。 
        
    1. Timed Waiting(时间数)计时等待:同waiting状态,有几个方法有超时参数,调用他们将进入Timed Waiting状态。这一状态 将一直保持到超时期满或者接收到唤醒通知。带有超时参数的常用方法有Thread.sleepObject.wait

    2. Teminated(被 终止):因为run方法正常退出而死亡,或者因为没有捕获的异常终止了run方法而死亡。

    //包子类
    public class Bun {
        private String bun_kin;
        private String bun_depression;
        private boolean aBoolean=false;
    
        public Bun() {
        }
    
        public Bun(String bun_kin, String bun_depression) {
            this.bun_kin = bun_kin;
            this.bun_depression = bun_depression;
        }
    
        @Override
        public String toString() {
            return "Bun{" +
                    "bun_kin='" + bun_kin + '\'' +
                    ", bun_depression='" + bun_depression + '\'' +
                    '}';
        }
    
        public String getBun_kin() {
            return bun_kin;
        }
    
        public void setBun_kin(String bun_kin) {
            this.bun_kin = bun_kin;
        }
    
        public String getBun_depression() {
            return bun_depression;
        }
    
        public void setBun_depression(String bun_depression) {
            this.bun_depression = bun_depression;
        }
    
        public boolean getaBoolean() {
            return aBoolean;
        }
    
        public void setaBoolean(Boolean aBoolean) {
            this.aBoolean = aBoolean;
        }
    }
    //店铺线程
    public class Bun_Boss extends Thread{
        private Bun bun;
    
        public Bun_Boss(Bun bun) {
            this.bun = bun;
        }
    
        @Override
        public void run() {
            while (true){
                synchronized(bun){
                    if (bun.getaBoolean()==true){
                        //生产包子
                        try {
                            bun.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                        bun.setBun_kin("薄皮");
                        bun.setBun_depression("酱肉");
                        bun.setaBoolean(true);
                        bun.notify();
                        System.out.println("生产完成"+bun.getBun_kin()+bun.getBun_depression()+"包子");
    
                }
            }
        }
    }
    //顾客线程
    public class Custom extends Thread {
        private Bun bun;
        public Custom(Bun bun){
            this.bun=bun;
        }
    
        @Override
        public void run() {
            while (true){
                synchronized(bun){
                    if (bun.getaBoolean()==false){
                        try {
                            bun.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                        System.out.println("正在吃包子。。。。。。");
                        bun.setaBoolean(false);
                        bun.notify();
                        System.out.println("又吃完了");
                        System.out.println("=============");
    
                }
    
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:线程笔记三(线程的睡眠和唤醒)

          本文链接:https://www.haomeiwen.com/subject/zfynmctx.html