多线程中的常见锁分类

您所在的位置:网站首页 java多线程有几种锁 多线程中的常见锁分类

多线程中的常见锁分类

2024-07-01 16:55| 来源: 网络整理| 查看: 265

锁分类 公平锁和非公平锁

公平锁:是指多个线程按照申请锁的顺序来获取锁

非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获锁。

非公平锁一上来就尝试占用锁,如果尝试占用失败,就采用公平锁的方式到末尾排队。

在高并发的情况下,有可能造成优先级反转或饥饿现象

非公平锁的优点在于吞吐量比公平锁大。

ReentrantLock:可以指定构造方法的boolean类型来指定是公平锁还是非公平锁,默认是非公平锁

synchronized:是一种非公平锁

可重入锁(又名递归锁)

可重入锁:指的是同一线程外层方法获得锁之后,内层递归方法仍然能够获得该锁的代码

在同一个线程在外层方法获取锁的时候,在进入内层方法的时候会自动获取锁

也就是说,线程可以进入任何一个它自己已经拥有的锁所同步着的代码块

可重入锁的最大作用是避免死锁

ReentrantLock和synchronized就是一个典型的可重入锁

class People{ Lock lock = new ReentrantLock(); public void get(){ lock.lock(); try{ System.out.println(Thread.currentThread().getName()+" get"); set(); }finally { lock.unlock(); } } public void set(){ lock.lock(); try{ System.out.println(Thread.currentThread().getName()+" set"); }finally { lock.unlock(); } } } public class ReentrantLockDemo { public static void main(String[] args) throws InterruptedException { People people = new People(); new Thread(()->{ people.get(); },"t3").start()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3