经典同步模型-生产者消费者java代码实现
程序员文章站
2022-05-24 08:50:09
...
package cn.smallbug.thread; /** * 资源定义 * * @timestamp Feb 13, 2016 11:55:10 PM * @author smallbug */ class Resource { private String name; private int age = 0; private boolean flag = false; public synchronized void setShow(String name) { while (flag) try { this.wait(); } catch (InterruptedException e) { } this.name = name + age++; System.out.println("~~~~~~" + Thread.currentThread().getName() + "~~生产者~~~~" + this.name); flag = true; this.notifyAll(); } /** * 生产者 * * @timestamp Feb 13, 2016 11:55:24 PM */ public synchronized void getShow() { while (!flag) try { this.wait(); } catch (InterruptedException e) { } System.out.println("~~~消费者~~~" + Thread.currentThread().getName() + "~~~~~~" + this.name); flag = false; this.notifyAll(); } } /** * 生产者 * * @timestamp Feb 13, 2016 11:55:30 PM * @author smallbug */ class Production implements Runnable { private Resource r; Production(Resource r) { this.r = r; } @Override public void run() { while (true) { r.setShow("小虫"); } } } /** * 消费者 * * @timestamp Feb 14, 2016 12:17:29 AM * @author smallbug */ class Consumer implements Runnable { private Resource r; Consumer(Resource r) { this.r = r; } @Override public void run() { while (true) { r.getShow(); } } } public class WaitAwake { public static void main(String[] args) { Resource re = new Resource(); Production p = new Production(re); Consumer c = new Consumer(re); Thread t1 = new Thread(p); Thread t2 = new Thread(c); t1.start(); t2.start(); } }
上一篇: java线程安全和锁机制详解