重新锁定重新输入锁是指同一线程在同一线程上的重复。
同步关键字支持隐藏的re -Incincome;当线程获得锁时,它支持此线程以多次获得此锁,并且将无法阻止自己。在我们的开发过程中,对锁定的释放无需保健。对于递归示例,让我们看一下同步关键字锁的重组。
输出结果为10,在此过程中,重复输入同步关键字修改的主要(int i)方法。因此,它还证明了上述语句是正确的。
重新输入基于AQS和锁定。如果我们的重新进入是要实现重新构成的,那么它需要解决并意识到以下两个问题:
重新输入洛克(Reentrantlock)有两种类型的重新锁定:
公平锁和非flat锁的本质的本质在于获得锁的顺序是否符合FIFO。对于公平的锁,首先添加同步队列等待线,并将首先获得同步状态(锁定)。
在源代码分析之前,让我们看一下如何使用重新输入的锁。重新进入的使用非常简单。示例代码如下:
如上所述的情况,线程A和线程B的输出的结果如下(这是一个非锁定锁,不要被当前顺序混淆):
nonfairsync的TryRelease调用TryRelease中的sync中,该调用在同步源代码中详细介绍。介绍tryAcquire(1)十次,然后线程A将与第一个9次呼叫TryRelease(1)同时返回false(1)。(1)同步状态将真正发布。该方法返回true,并且持有共享状态的线程将其放置为null。
Fairsync可以按顺序获得共享状态,也就是说,以确保添加同步队列和获得同步状态的顺序是一致的,并依靠当前节点的判断来判断当前节点的判断。
查看输出
同步队列中等待线的顺序为2、3、4、5,此时在等待的顺序下,1、2、3、4、5、1、2、3、4、5的结果同步队列,当您首先输入同步队列时,先获取锁定。
查看输出
同步队列中的螺纹顺序当时为2、4、5和3,但是线1继续连续获得两个锁,因此非fair锁无法保证获得锁的顺序。
非fair锁显然是“饥饿”的问题,也就是说,线程的可能性将继续在获得锁后再次获得锁定,这导致了其他线程的漫长等待时间。什么是默认实现?主要原因是公平锁会带来大量的线程开头。尽管公平锁可能会导致线程“饥饿”问题,但其吞吐量远大于公平锁。相比之下,优势更大。