在生产者消费者模型中,下面的代码:
- class Resource
- {
- private String name;
- private int num=0;
- private boolean flag=false;
- public Resource(String name)
- {
- this.name=name;
- }
- public synchronized void set()
- {
- while(flag)
- try{wait();}catch(InterruptedException e){e.getMessage();}
- num++;
- System.out.println(Thread.currentThread().getName()+"...生产者:"+name+num);
- flag=true;
- notifyAll();
- }
- public synchronized void get()
- {
- while(!flag)
- try{wait();}catch(InterruptedException e){e.getMessage();}
- System.out.println(Thread.currentThread().getName()+"......消费者:"+name+num);
- flag=false;
- notifyAll();
- }
- }
复制代码
set和get方法都是用的一个this锁,当一个线程在其中一个方法中wait,那不是所有线程都进不去了吗?因为没有释放锁的操作
Lock里面还在finally中写了unlock
|