1.线程状态概述

2.Timed Waiting(计时等待)
3.BLOCKED(锁等待)

4.Waiting(无限等待)
Wating状态在API中介绍为:一个正在无限期等待另一个线程执行一个特别的(唤醒)动作的线程处于这一状态。
5.生产者和消费者案例
package com.Study_01;public class BaoZi {String pi;String xian;boolean flag = false;}
package com.Study_01;public class BaoZiPu extends Thread {// 需要在成员位置创建一个包子变量private BaoZi bz;// 使用带参数构造方法,为这个包子变量赋值public BaoZiPu(BaoZi bz) {this.bz = bz;}@Overridepublic void run() {int count = 0;// 让包子铺一直生产包子while (true) {// 保证只能有一个在执行synchronized (bz) {// 对包子的状态进行判断if (bz.flag == true) {// 包子铺调用wait方法进入等待状态try {bz.wait();} catch (InterruptedException e) {e.printStackTrace();}}// 被唤醒之后,包子铺生产包子// 增加趣味性 ,交替生产包字if (count % 2 == 0) {// 生产 薄皮三鲜馅bz.pi = "薄皮";bz.xian = "三鲜馅";} else {// 生产 冰皮 牛肉大葱馅bz.pi = "冰皮";bz.xian = "牛肉大葱馅";}count++;System.out.println("包子铺正在生产:" + bz.pi + bz.xian + "包子");// 生产包字需要三秒钟try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}// 包子铺生产好了包子// 修改包字状态为 truebz.flag = true;// 唤醒吃货线程,让吃货线程吃包子bz.notify();System.out.println("包子已经生产好了:" + bz.pi + bz.xian + "包字,吃货可以开始吃了");}}}}
package com.Study_01;public class ChiHuo extends Thread {// 需要在成员位置创建一个包子变量private BaoZi bz;// 使用带参数构造方法,为这个包子变量赋值public ChiHuo(BaoZi bz) {this.bz = bz;}@Overridepublic void run() {// 使用死循环,保证吃货一直吃包子while (true) {synchronized (bz) {// 对包子状态进行判断if (bz.flag == false) {// 吃货调用wait方法进入等待状态try {bz.wait();} catch (InterruptedException e) {e.printStackTrace();}}// 被唤醒之后的代码,吃包子System.out.println("吃货正在吃:" + bz.pi+bz.xian+ "的包子");// 吃货吃完包子// 修改包字的状态为falsebz.flag = false;// 吃货唤醒包字铺线程,生产包子bz.notify();System.out.println("吃货已经把:"+bz.pi+bz.xian+"的包字吃完了,包子铺开始生产包子");System.out.println("-----------------------------------------------");}}}}
package com.Study_01;public class Demo {public static void main(String[] args) {BaoZi bz = new BaoZi();new BaoZiPu(bz).start();new ChiHuo(bz).start();}}
