wait、notify生产者与消费者模型
package com.mayikt.thread.days02; /** * @author 余胜军 * @ClassName Thread04 * @qq 644064779 * @addres www.mayikt.com * 微信:yushengjun644 */ public class Thread04 { /** * 共享对象 res */ class Res { public String userName; public char sex; /** * flag 默认值==false * flag false 输入线程 输入值 输出线程 * flag true 输出线程 输出值 */ public boolean flag = false; } /** * 第一次 输出余胜军,男 * 第二次 输出小薇,女 * 第三次 输出余胜军,男 * 第四次 输出小薇,女 */ class InputThread extends Thread { private Res res; public InputThread(Res res) { this.res = res; } @Override public void run() { int count = 0; while (true) { synchronized (res) { if (res.flag) { try { res.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } if (count == 0) { res.userName = "余胜军"; res.sex = '男'; } else { res.userName = "小薇"; res.sex = '女'; } // 输出线程 输出值 res.flag = true; // 唤醒输出线程 res.notify(); } // 1%2 = 2%2 3%2 4%2= count = (count + 1) % 2; } } } /** * 输出的线程 */ class OutPutThread extends Thread { private Res res; public OutPutThread(Res res) { this.res = res; } @Override public void run() { while (true) { synchronized (res) { if (!res.flag) { // 如果 res.flag=false 则 输出的线程 主动释放锁 同时会阻塞该线程 try { res.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(res.userName + "," + res.sex); // 输出完毕 交给我们的输入线程继续的输入 res.flag = false; res.notify();; } } } } public static void main(String[] args) { new Thread04().print(); } public void print() { // 全局对象 Res res = new Res(); // 输入线程 InputThread inputThread = new InputThread(res); OutPutThread outPutThread = new OutPutThread(res); inputThread.start(); outPutThread.start(); } }