一.生产者
package org.zhq.thread;
/**
* @author 作者 hq.zheng:
* @version 创建时间:2018-9-7 下午4:54:27
* 类说明 生产者
*/
public class P {
private String lock;
public P(String lock){
super();
this.lock=lock;
}
public void setValue(){
try {
synchronized (lock) {
if(!ValueObject.value.equals("")){
System.out.println("生产者"+Thread.currentThread().getName()+"waiting======>");
lock.wait();
}
System.out.println("生产者"+Thread.currentThread().getName()+"runnabled ########...");
String value=System.currentTimeMillis()+"_"
+System.nanoTime();
System.out.println("set的值是"+value);
ValueObject.value=value;
lock.notify();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
二.消费者
package org.zhq.thread;
/**
* @author 作者 hq.zheng:
* @version 创建时间:2018-9-7 下午5:04:14
* 类说明 消费者
*/
public class C {
private String lock;
public C(String lock){
super();
this.lock=lock;
}
public void setValue(){
try {
synchronized (lock) {
if(ValueObject.value.equals("")){
System.out.println("消费者"+Thread.currentThread().getName()+"waiting======>");
lock.wait();
}
System.out.println("消费者"+Thread.currentThread().getName()+"runnabled ########...");
System.out.println("get的值是"+ValueObject.value);
ValueObject.value="";
lock.notify();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
三.生产线程
package org.zhq.thread;
/**
* @author 作者 hq.zheng:
* @version 创建时间:2018-9-7 下午5:12:23
* 类说明 生产线程
*/
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 org.zhq.thread;
/**
* @author 作者 hq.zheng:
* @version 创建时间:2018-9-7 下午5:15:02
* 类说明 消费线程
*/
public class ThreadC extends Thread {
private C c;
public ThreadC(C c){
super();
this.c=c;
}
@Override
public void run(){
while (true) {
c.setValue();
}
}
}
五.生产物品
package org.zhq.thread;
/**
* @author 作者 hq.zheng:
* @version 创建时间:2018-9-7 下午4:59:31
* 类说明 生产物品
*/
public class ValueObject {
public static String value="";
}
六.模拟生产消费
package org.zhq.thread;
/**
* @author 作者 hq.zheng:
* @version 创建时间:2018-9-7 下午5:07:55
* 类说明 模拟生产消费
*/
public class Run {
public static void main(String[] args) {
String lock=new String("");
P p=new P(lock);
C c=new C(lock);
ThreadP pThread=new ThreadP(p);
ThreadC cThread=new ThreadC(c);
pThread.start();
cThread.start();
}
}
七.结果