本帖最后由 pifuhanshu 于 2014-3-21 18:29 编辑
- import java.util.concurrent.locks.*;
- class Resourse
- {
- String name;
- int num=1;
- boolean flag=false;
- Lock lock=new ReentrantLock();
- Condition consumer_con=lock.newCondition();
- Condition producer_con=lock.newCondition();
- public void set(String name)
- {
- lock.lock();
- try
- {
- while(flag)
- try
- {
- consumer_con.await();
- }
- catch (InterruptedException e)
- {
- }
- this.name=name+num;
- num++;
- System.out.println(Thread.currentThread().getName()+"。。produce。。"+this.name);
- flag=true;
- producer_con.signal();
- }finally
- {
- lock.unlock();
- }
- }
- public void out()
- {
- try
- {
- while(!flag)
- try
- {
- producer_con.await();
- }
- catch (InterruptedException e)
- {
- }
- System.out.println(Thread.currentThread().getName()+"..con.."+this.name);
- flag=false;
- consumer_con.signal();
- }finally
- {
- lock.unlock();
- }
- }
- }
- class Producer implements Runnable
- {
- Resourse r;
- Producer(Resourse r)
- {
- this.r=r;
- }
- public void run()
- {
- while(true)
- {
- r.set("北京全聚德烤鸭!!!");
- }
- }
- }
- class Consumer implements Runnable
- {
- Resourse r;
- Consumer(Resourse r)
- {
- this.r=r;
- }
- public void run()
- {
- while(true)
- {
- r.out();
- }
- }
- }
- class ProConDemo1
- {
- public static void main(String[] args)
- {
- Resourse r=new Resourse();
- Consumer con=new Consumer(r);
- Producer pro=new Producer(r);
- Thread t1=new Thread(con);
- Thread t2=new Thread(pro);
- t1.start();
- t2.start();
- }
- }
复制代码 问题是编译没出错,到解释的时候抛出:Lang.illegalMonitorStateException
|