生产者:
public class Producer {
private String lock ;
public Producer (String lock ){
super();
this .lock = lock ;
}
public void setValue (){
try {
synchronized (lock ){
if (!ValueObject.value .equals("" )){
lock .wait();
}
String value = System.currentTimeMillis() + "_" + System.nanoTime();
ValueObject.value = value ;
System.out .println("set:" + value );
lock .notify();
}
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
消费者:
public class Consumer {
private String lock ;
public Consumer (String lock ){
super();
this .lock = lock ;
}
public void getValue (){
try {
synchronized (lock ){
if (ValueObject.value .equals("" )){
lock .wait();
}
System.out .println("get:" + ValueObject.value );
ValueObject.value = "" ;
lock .notify();
}
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
生产者线程:
public class ThreadProducer extends Thread {
private Producer producer;
public ThreadProducer (Producer producer){
this .producer = producer;
}
@Override
public void run () {
while (true ){
producer.setValue();
}
}
}
消费者线程:
public class ThreadConsumer extends Thread {
private Consumer consumer;
public ThreadConsumer (Consumer consumer){
this .consumer = consumer;
}
@Override
public void run () {
while (true ){
consumer.getValue();
}
}
}
公共值对象
public class ValueObject {
public static String value = "" ;
}
启动类:
public class Run {
public static void main (String[] args) {
String lock = new String("" );
Producer p = new Producer(lock );
Consumer c = new Consumer(lock );
ThreadProducer pThread = new ThreadProducer(p);
ThreadConsumer cThread = new ThreadConsumer(c);
pThread.start();
cThread.start();
}
}
运行结果
set :1487991128665 _697508406469322
get :1487991128665 _697508406469322
set :1487991128665 _697508406488082
get :1487991128665 _697508406488082
set :1487991128665 _697508406506548
get :1487991128665 _697508406506548
set :1487991128665 _697508406525014
get :1487991128665 _697508406525014
set :1487991128665 _697508406544066
get :1487991128665 _697508406544066