/*
package lyj.java;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/*
class Resource{
//成员属性
private String name;
private int num;
private boolean flag=false;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
//空的构造方法
public Resource(){}
//构造方法
public Resource(String name, int num) {
super();
this.name = name;
this.num = num;
}
//引入lock,并创建对象
Lock lock=new ReentrantLock();
//引入condition
Condition con=lock.newCondition();
Condition pro=lock.newCondition();
//功能1:生产
public synchronized void set(){
while(true)
{ lock.lock();
if(flag)
try{con.await();}catch(InterruptedException e){}
System.out.println(Thread.currentThread().getName()+"---生产---"+num);
num++;
pro.signal();
lock.unlock();
}
}
//功能2:消费
public synchronized void out(){
while(true)
{ lock.lock();
if(!flag)
try{pro.await();}catch(InterruptedException e){}
System.out.println(Thread.currentThread().getName()+"-----消费------"+num);
con.signal();
lock.unlock();
}
}
}
/*
描述生产者
*/
class Producer implements Runnable{
private Resource r;
//构造方法
public Producer(Resource r) {
this.r=r;
}
//复写run方法
public void run() {
r.set();
}
}
/*
描述消费者
*/
class Consumer implements Runnable{
private Resource r;
//构造方法
public Consumer(Resource r) {
this.r=r;
}
//复写run方法
public void run() {
r.out();
}
}
public class Test8 {
public static void main(String[] args) {
Resource r=new Resource();
Producer pro=new Producer(r);
Consumer con=new Consumer(r);
Thread t1=new Thread(pro);
Thread t2=new Thread(con);
t1.start();
t2.start();
}
}
http://blog.chinaunix.net/uid-27795088-id-3977915.html
http://blog.csdn.net/thinkpadshi/article/details/8163751