java 有三种锁机制:
1.synchronized-----> 内置 1个 Condition
2ReentrantLock------>可以 new出Condition(多个)
3ReetrantReadWriteLock------>可以new 出读锁和 写锁
读锁:多个读线程能共用读锁(但是写线程会被排斥)
写锁:与其他所有读锁和写锁
Condition 上的 signalAll 和 signal :尽量用signalAll:因为他不会立即激活一个等待线程,它仅仅解除等待线程阻塞,以便这些线程可以在当前线程退出同步方法后,通过竞争实现对对象的访问。signal 只是随机解除一个等待,[如果这个线程还是不能运行,就有死锁的危险]