摘要:
Condition 接口一共提供了以下 7 个方法: await():线程等待直到被通知或者中断。类似于 Object.wait()。 awaitUninterruptibly():线程等待直到被通知,即使在等待时被中断也不会返回。没有与之对应的 Object 方法。 await(long time 阅读全文
摘要:
ReentrantReadWriteLock 是 Java 的一种读写锁,它允许多个读线程同时访问,但只允许一个写线程访问(会阻塞所有的读写线程)。这种锁的设计可以提高性能,特别是在读操作的数量远远超过写操作的情况下。 在并发场景中,为了解决线程安全问题,我们通常会使用关键字 synchronize 阅读全文
摘要:
ReentrantLock 重入锁,是实现Lock 接口 的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源重复加锁,即当前线程获取该锁后再次获取不会被阻塞。 要想支持重入性,就要解决两个问题: 在线程获取锁的时候,如果已经获取锁的线程是当前线程的话则直接再次获取成功; 阅读全文
摘要:
锁的分类 乐观锁、悲观锁 对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。Java 中,synchronized 关键字是最典型的悲观锁。 乐观锁认为自己在使用数据时不会有别的线程修改数据,所以不会加锁,只是 阅读全文