本帖最后由 turalyang@gmail 于 2013-3-14 00:54 编辑
1.Lock是接口,类ReentrantLock实现接口Lock ,接口不是不能创建对象吗??
答:Lock是接口,不能实例化,但经过实现的话就可以了。既然你知道"类ReentrantLock实现接口Lock" ,就应该明白ReentrantLock是Lock接口的实现类,它实现了接口中那些方法的方法体,而这条语句实例化的是这个实现类,而不是接口本身啦。。
2.- private Condition condition_pro = lock.newCondition(); //这两句话不明白,请各位解释一下???
- private Condition condition_con = lock.newCondition();
- /*
- 答:Condition实例实质上是被绑定到一个锁上,要为特定Lock实例获得Condition实例,就需要使用其newCondition()方法。
- 所以就有这样两条语句,意思是创建名为condition_pro和condition_con的Condition实例,并用private声明使其私有化。
- */
复制代码 3.- try
- {
- while(flag)
- condition_pro.await();//凭什么说condition_pro.await()就指定的是让生产者等待???有什么依据???
- this.name = name+"--"+count++;
- System.out.println(Thread.currentThread().getName()+"...生产者.."+this.name);
- flag = true;
- condition_con.signal();//凭什么说condition_con.signal() 就指定的是唤醒消费者???有什么依据???
- }
- /*
- 答:await()方法是这么一个功能:令当前线程在接到信号或被中断之前一直处于等待状态。
- 而signal()方法则是这样的功能:唤醒一个等待线程。
- 这都是Condition接口定义的方法,真要问为什么。。其实我也不知道。。
- */
复制代码 这个是貌似是JDK1.5添加的内容,其实就是Synchronized换成Lock,将Object中的wait,notify,notifyAll这些方法换成了Condition里头的await,signal,signalAll. |