单一生产者和消费者的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
。。。