他线程想要读写这个数据时,会被这个线程block,直到这个线程释放锁然后其他线程获取到锁 1. 2. 3. 4. 5. 6. 7. 8. 四、自旋锁 应用 CAS 实现 为了让线程等待,我们只须让线程执行一个忙循环 优点 避免了线程切换的开销,挂起线程和恢复线程的操作都需要转入内核态中完成,这些操作给Java虚拟机的并发性能带来了...
乐观锁,悲观锁 乐观锁:其实是一种采用具有原子性的CAS非加锁机制,保证当前现场原子性执行。 悲观锁:直接加锁进行线程隔离。synchronized、ReentrantLock,ReentrantReadWriteLock的写锁都属于悲观锁,适合写操作非常多的场景,乐观锁适合读操作非常多的场景,不加锁会带来大量的性能提升。 根据获取锁时是否参与排队: 公平...
自旋锁 自旋锁(spinlock):是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,这样的好处是减少上下文切换的消耗,缺点就是循环会消耗CPU /** * 实现一个自旋锁 * 通过CAS操作完成自旋锁,A线程先来调用myLock方法自己持有锁5秒钟,B随后进来发现当前有线程持有锁,不是null, * 所以...