java中notify和wait实现操作系统pv操作(单一生产者消费者)

    xiaoxiao2021-03-27  31

    单一生产者和消费者的pv操作,就是生产一个,消费一个,不生成,你就不能消费。

    看代码:p操作

    package entity; //生产者 public class P { private String lock; public P(String lock) { super(); this.lock = lock; } public void setValue() { try { synchronized (lock) { if (!ValueObject.getValue().equals("")) { lock.wait(); } String value = System.currentTimeMillis() + "_" + System.nanoTime(); System.out.println("set的值是" + value); ValueObject.setValue(value); lock.notify(); } } catch (InterruptedException e) { e.printStackTrace(); } } } v操作:

    package entity; //消费者 public class C { private String lock; public C(String lock) { super(); this.lock = lock; } public void getValue() { try { synchronized (lock) { if (ValueObject.getValue().equals("")) { lock.wait(); } System.out.println("get的值是" + ValueObject.getValue()); ValueObject.setValue(""); lock.notify(); } } catch (InterruptedException e) { e.printStackTrace(); } } } 标记变量类:

    package entity; public class ValueObject { private static String value = ""; public static String getValue() { return value; } public static void setValue(String value) { ValueObject.value = value; } }

    两个包装线程类:

    package extthread; import entity.P; public class ThreadP extends Thread { private P p; public ThreadP(P p) { super(); this.p = p; } @Override public void run() { while (true) { p.setValue(); } } } package extthread; import entity.C; public class ThreadC extends Thread { private C r; public ThreadC(C r) { super(); this.r = r; } @Override public void run() { while (true) { r.getValue(); } } } 测试类:

    package test; import entity.P; import entity.C; import extthread.ThreadP; import extthread.ThreadC; public class Run { public static void main(String[] args) { String lock = new String(""); P p = new P(lock); C r = new C(lock); ThreadP pThread = new ThreadP(p); ThreadC rThread = new ThreadC(r); pThread.start(); rThread.start(); } }

    运行结果如下:

    get的值是1492050129031_3413254330630 set的值是1492050129031_3413254350825 get的值是1492050129031_3413254350825 set的值是1492050129031_3413254370358 get的值是1492050129031_3413254370358 set的值是1492050129031_3413254390222 get的值是1492050129031_3413254390222

    。。。

    转载请注明原文地址: https://ju.6miu.com/read-664534.html

    最新回复(0)