syncroniezd 和 lock 的原理和区别

synchoronized是JVM的内置锁,而lock是Java代码实现的。lock是sync对的扩展,完全可以替代后者。lock可以重入,允许同一个线程连续多次获得同一把锁。其次,lock独有的功能有:

1、可以响应中断,sync要么获得锁执行,要么保持等待。而重入锁可以响应中断,使得线程在迟迟得不到锁的情况下,不用再等待。主要由lockInterruptibly()实现,这是一个可以对中断进行响应的锁申请动作,锁中断可以避免死锁。

2、锁的申请可以有等待时限,用tryLock()可以实现限时等待,如果超时还未获得锁会返回false,也防止线程迟迟得不到锁时一直等待,可以避免死锁。

3、公平锁,即锁的获得按照线程先来后到的顺序依次获得,不会产生饥饿现象。sync的锁默认不公平,可通过传入构造方法的参数实现公平锁。

4、重入锁可以绑定多个Condition条件,这些Condition通过调用await/singal实现线程间通信。

原文地址:https://www.cnblogs.com/zhanghongxian666/p/11179360.html

时间: 2024-11-02 18:47:42

syncroniezd 和 lock 的原理和区别的相关文章

HashMap,Hashtable,ConcurrentHashMap 和 synchronized Map 的原理和区别

HashMap 是否是线程安全的,如何在线程安全的前提下使用 HashMap,其实也就是HashMap,Hashtable,ConcurrentHashMap 和 synchronized Map 的原理和区别.当时有些紧张只是简单说了下HashMap不是线程安全的:Hashtable 线程安全,但效率低,因为是 Hashtable 是使用 synchronized 的,所有线程竞争同一把锁:而 ConcurrentHashMap 不仅线程安全而且效率高,因为它包含一个 segment 数组,将

交换机和路由器各自的实现原理及区别

交换机属于OSI第二层即数据链路层设备.它根据MAC地址寻址,通过站表选择路由,站表的建立和维护由交换机自动进行.交换是指转发和过滤帧. 路由器属于OSI第三层即网络层设备,它根据IP地址进行寻址,通过路由表路由表路由协议产生.路由是指网络线路当中非直连的链路. 交换机最大的好处是快速,路由器最大的好处是控制能力强. 区别: ①交换是不需要IP的,而路由需要,因为IP就是第三层的协议,第二层需要的是MAC地址. ②第二层的技术和第三层的技术不一样,第二层可以做VLAN.端口捆绑等,第三层可以做N

开发程序 ip 127.0.0.0 0.0.0.0原理与区别

ip 127.0.0.1 0.0.0.0ip 地址分四个字节,每个字节有八位,及ip地址有32位,每位的数字是0-255,位与位之间用“."分开,有时ip/24,24代表24个1,表示的是子网掩码,等价于255.255.255.0.网络号是有ip和子网掩码安位与形成的,剩余的一位是本机的主机号.127.x.x.x一个特殊的ip,linux上称为localhost,习惯上称为127.0.0.1,实际上127.0.0.1到127.255.255.254之间都是等价的.正常的网络包从ip层到进入到链路

Lock与synchronized 的区别

1.ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候 线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定, 如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断 如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情 ReentrantLock获取锁定与三种方式:    a)  lock(), 如果获取了锁立即返回,

Delphi SendMessage PostMessage 原理和区别

今天用实例解释一下SendMessage PostMessage 原理和区别: 向按钮(Button)发送单击: SendMessage: SendMessage(Button1.Handle, WM_LBUTTONDOWN, 0, 0); SendMessage(Button1.Handle, WM_LBUTTONUP, 0, 0); PostMessage: PostMessage(Button1.Handle, WM_LBUTTONDOWN, 0, 0); PostMessage(Butt

关于MySQL与SQLLite的Group By排序原理的区别

当我们对一个表的记录进行group by的时候,在未明确使用sum.min.max等聚合函数的时候,group by 的排序规则,如下对比了MYSQL和SQLLite 大家都知道,group by的时候,数据库是遍历数据库表的所有记录进行匹配处理的. 下面的SQL目的是为了查询表中groupid相同的记录中,最新时间的一条消息,给出mysql和sqllite的语句区别: MYSQL语句 SELECT * FROM( SELECT t.id,t.data_id,t.send_username,t.

lock和synchronized的区别

与synchronized类似的,lock也能够达到同步的效果 Lock是一个接口,为了使用一个Lock对象,需要用到 Lock lock = new ReentrantLock(): lock必须调用unlock方法进行手动释放,为了保证释放的执行,往往会把unlock() 放在finally中进行. synchronized 是不占用到手不罢休的,会一直试图占用下去.与 synchronized 的钻牛角尖不一样,Lock接口还提供了一个trylock方法.trylock会在指定时间范围内试

阿里面试实战题2----ReentrantLock里面lock和tryLock的区别

ReentrantLock ReentrantLock(轻量级锁)也可以叫对象锁,可重入锁,互斥锁.synchronized重量级锁,JDK前期的版本lock比synchronized更快,在JDK1.5之后synchronized引入了偏向锁,轻量级锁和重量级锁.以致两种锁性能旗鼓相当,看个人喜欢,本文主要介绍一下lock和tryLock的区别. Lock VS  TryLock 1 public void lock() { 2 sync.lock(); 3 } 4 5 public void

lock()与lockInterruptibly()的区别

lock 与 lockInterruptibly比较区别在于:lock 优先考虑获取锁,待获取锁成功后,才响应中断.lockInterruptibly 优先考虑响应中断,而不是响应锁的普通获取或重入获取. 详细区别: ReentrantLock.lockInterruptibly允许在等待时由其它线程调用等待线程的Thread.interrupt方法来中断等待线程的等待而直接返回,这时不用获取锁,而会抛出一个InterruptedException. ReentrantLock.lock方法不允