一生产一消费
例子:
/**
* 一生产一消费
*/
public class Run {
public static void main(String[] args) {
String lock="";
P p=new P(lock);
C c=new C(lock);
P_Thread p_thread=new P_Thread(p);
C_Thread c_thread=new C_Thread(c);
p_thread.start();
c_thread.start();
}
}
class ValueObject{
public static String value="";
}
/**
* 生产者线程
*/
class P_Thread extends Thread{
private P p;
public P_Thread(P p) {
super();
this.p = p;
}
@Override
public void run() {
while(true){
p.setValue();
}
}
}
class C_Thread extends Thread{
private C c;
public C_Thread(C c) {
super();
this.c = c;
}
@Override
public void run() {
while (true){
c.getValue();
}
}
}
class P{
private String lock;
public P(String lock){
this.lock=lock;
}
public void setValue(){
try {
synchronized (lock){
if(!ValueObject.value.equals("")){
lock.wait();
}
String value =System.currentTimeMillis()+"-"+System.nanoTime();
System.out.println("set的值为:"+value);
ValueObject.value=value;
lock.notify();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class C{
private String lock;
public C(String lock){
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();
}
}
}