需求:第一个线程写入(input)用户,另一个线程取读取(out)用户.实现读一个,写一个操作。
用synchronized实现线程通讯
class Res { public String name; public String sex; // flag false out线程未读取值 public boolean flag = false;}class InpThread extends Thread { public Res res; public InpThread(Res res) { this.res = res; } @Override public void run() { int count = 0; while (true) { synchronized (res) { if (res.flag) { // 当前线程等待。wait();类似于 sleep 可以让当前线程,从运行状态变为休眠状态 wait // 使用在多线程之间同步 和synchronized 一起使用 // wait可以释放锁 ,sleep 不能释放锁。 try { res.wait(); } catch (Exception e) { // TODO: handle exception } } if (count == 0) { res.name = "LLL丶Blog"; res.sex = "男"; } else { res.name = "小红"; res.sex = "女"; } // 实现奇数和偶数 count = (count + 1) % 2; res.flag = true; // 和wait 一起使用 唤醒拧一个线程 唤醒从阻塞状态变为运行状态 res.notify(); } } }}class OutThread extends Thread { public Res res; public OutThread(Res res) { this.res = res; } @Override public void run() { while (true) { synchronized (res) { if (!res.flag) { try { res.wait(); } catch (Exception e) { // TODO: handle exception } } System.out.println(res.name + "---" + res.sex); res.flag = false; res.notify(); } } }}public class ThreadDemo01 { public static void main(String[] args) { Res res = new Res(); InpThread inpThread = new InpThread(res); OutThread outThread = new OutThread(res); inpThread.start(); outThread.start(); }}
这样就实现了一个一个的打印