帅气的毛毛侠

导航

第十四章、构建自己的同步工具

1.条件谓词概念:

2.依赖于条件谓词的状态来决定执行或者休眠,可以使用condition:即Condition.await()和Condition.signal()方法

  在使用await和notify之前要先加锁,再进行await()或者notify(),在每次调用await方法的时候,就会进入该Condition的等待队列(默认公平队列),直到signal方法唤醒,具体原理见帖子:

  http://www.jianshu.com/p/be2dc7c878dc

3.Thread.sleep(long time)和wait()的区别:Thread.sleep是持有锁休眠,而wait进入休眠的时候会释放锁。

4.有时候线程被唤醒的时间不是时候(或者是错过了某次的唤醒),还要继续检测条件谓词。应该在循环内部调用wait:

synchronized(lock){
  while(!conditionPredicate()){
    lock.wait();
  }
}

5.优先使用notifyAll()而不是notify(),这样能确保操作是正确的,尽管在性能上会有所降低。

6.一个依赖于状态的类,要么完全将他的等待和通知协议暴露(并文档化)给子类,要么完全阻止子类参与其中。

7.理解ReentrantLock,Semaphore,CountDownLatch,FutureTask,ReentrantLockReadWriteLock

 

posted on 2017-11-25 09:26  帅气的毛毛侠  阅读(98)  评论(0编辑  收藏  举报