当前位置: 首页 > 网络应用技术

帖子中的锁是什么,听我说清楚地告诉你

时间:2023-03-06 20:23:43 网络应用技术

  在本文中,让我们谈谈什么是锁,为什么需要锁定以及如何锁定。当然,我说的可能不足。欢迎大家在评论领域积极讨论。

  并发实际上非常简单,并发是多线程并发访问,也就是说,有n个多个线程可以获得相同的资源。

  当我们谈论的线程是多线程并发访问资源时,它们会确保其订单,因此如何确保订单?

  锁定是确保并发顺序的一种手段,锁可以实现线程安全性。

  实际上,锁定时需要考虑场景

  乐观锁的本质不是锁定。我们认为遇到并发写作的可能性将非常低。每次我们思考时,我们都认为它不会被修改,因此不会被阻止,但是为了确保数据的一致性在我们写作时需要再次确认,并且我们获得了最新的数据。取另一个副本,然后再次验证它直到通过验证。

  悲观的锁是认为更多的写作和阅读少。每次阅读和写数据时,您都会被锁定。让其他线程进入想要获得资源的阻止状态。直到当前线程获得资源来发布资源。

  Java中常用的乐观锁定是CAS算法+自旋(需要考虑ABA问题,CPU性能)。

  自适应自动螺旋锁(JVM优化旋转,您将选择最佳旋转时间,而不是保持CPU资源的消耗)

  完成:

  JDK1.5从一类AtomicStampedReference开始,以解决ABA问题。该类别的比较方法的作用是首先检查当前参考是否等于预期的参考,以及当前符号是否等于预期的符号。如果相同的情况相等,则在原子方法中将参考和徽标的值设置为给定的更新值。

  还有一些基于版本编号来解决ABA问题,而版本号仅增加。

  对于Java,同步关键字和锁的实现类是悲观的锁。

  Retreenlock的原理基于AQS。AQS试图首先使用CAS旋转。如果未获得,它将转换为悲观的锁。

  休闲锁通常需要通过阻止线程来实现。要更深入地了解悲观的锁,我们需要知道线程的状态。

  线的状态,如下图所示: