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

2019-10-19  本文已影响0人  There_7f76

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

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("=============");

            }

        }
    }
}

上一篇下一篇

猜你喜欢

热点阅读