您好,游客选择字体:繁體
首页 >> 服务器测评 >> 聊聊Java中的各种锁

聊聊Java中的各种锁

amdin 2020-08-18 0
浏览次数72

       Java中的锁的概念挺多,从思想的角度,分为通过各种锁。下面可以让我们来分别进行认识了解一下对于他们(虚拟主机)。

       我们一般用的都是可重入锁。可重入锁定装置,当一个线程获取锁,如果重新获得锁,它仍然可以得到。

       而不可重入锁,指的是当一个线程获取到自己一个锁后,如果再次进行获取社会这个锁的话,就不能再获取到了。不可重入锁会导致死锁,所以需要我们国家一般是不会通过使用过程中不可重入锁的。

       公平锁、非公平锁

       AQS框架可以实现公平锁和非公平锁。 AQS框架包含三个主要元素,一个是状态状态,用来表示锁是否被占用,另一个是当前线程,最后一个是保存被阻塞线程的队列。

       如果用于保存被阻塞线程的队列按顺序获取锁,并且队列的第一个线程首先获取锁,那么这是一个公平的锁,每个线程可以按照它进入队列的顺序获取锁。

       如果一个线程被阻塞,以节省排队不是为了得到一个锁,但大家争相锁,这个锁是不公平的,这可能会导致某些线程都不能获得锁被饿死。

       悲观锁,乐观锁,自旋锁

       悲观锁和乐观锁也是作为一种具有不同文化维度的锁的思想。

       悲观锁指的是在执行操作之前进行锁定,以确保只有获得锁的线程才能执行。 在这种情况下,由于锁定操作,效率可能较低,但确保安全。 像synchronized和Reentrant Lock一样是悲观锁。

       乐观锁不是在执行前锁定,而是在执行时判断,如 cas 是典型的乐观锁。在执行时,将线程工作内存与最新数据进行比较,如果是更新前的最新数据,如果不是最新数据,则工作线程内存中的数据已过期,则开发人员将处理该数据。

       提到CAS,可能会觉得自旋锁的。轻量级锁不同步CAS是使用自旋锁模式么。在这里,我们有很好的概念,CAS和旋转来区分。 CAS是一个比较和交换,也就是,比较和交流。这是一个操作,比较和交换操作。自旋是指执行相同的操作多次。他们是两个不同的概念。指自旋锁自旋的方式与CAS操作进行数次。因此,CAS是乐观锁,并多次CAS,也就是乐观锁的实施,就变成了自旋锁倍。

       独占锁、共享锁

       独占锁、共享锁也是一个思想进行成本的概念。

       只有一个线程能够拥有该锁独占锁装置以执行相应的操作。例如:同步和的ReentrantLock,以及写锁定读写锁。

       共享锁指的是企业可以有多个线程同时我们拥有自己这个锁。比如:读写锁中的读锁,是允许使用多个线程一同获取到的。还有Semaphore(信号量),因为他们允许存在多个线程需要通过,所以发展也是一个共享锁。

       总结

        这么多锁的概念是从不同维度对锁进行分类。 这些都是概念性的东西,可以用不同的方式实现。

       这些锁本质上是一个框架,其功能是允许一个或多个线程在正确的时间执行,而另一个或其他线程阻塞。Java 并发库中的锁,哪个线程要执行,哪个线程要阻塞,由基于共享变量和锁支持的 aqs 确定。

       是的,锁被用来控制一个线程被阻塞框架和实施。

文章来源:http://www.rakceping.com/c26/

全部评论:0