多线程中的常见锁分类 |
您所在的位置:网站首页 › java多线程有几种锁 › 多线程中的常见锁分类 |
锁分类
公平锁和非公平锁
公平锁:是指多个线程按照申请锁的顺序来获取锁 非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获锁。 非公平锁一上来就尝试占用锁,如果尝试占用失败,就采用公平锁的方式到末尾排队。 在高并发的情况下,有可能造成优先级反转或饥饿现象 非公平锁的优点在于吞吐量比公平锁大。 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 |