java面试-synchronized与lock有什么区别?

1、原始构成:

synchronized是关键字,属于JVM层面,底层是由一对monitorenter和monitorexit指令实现的。

ReentrantLock是一个具体类,是API层面的锁。

2、使用方法:

synchronized不需要用户手动释放锁,当synchronized代码块执行完成后,系统会自动让线程释放对锁的占用

ReentrantLock需要用户手动释放锁,若没有手动释放可能导致死锁现象。

3、等待是否可中断:

synchronized不可中断,除非抛出异常或者正常运行完成

ReentrantLock可中断

4、加锁是否公平:

synchronized非公平锁

ReentrantLock两者都可以,默认是非公平锁。

5、锁绑定多个条件Condition:

synchronized没有。

ReentrantLock可用来分组唤醒需要唤醒的线程。而不是像synchronized要么随机唤醒一个线程,要么唤醒所有线程。

原文地址:https://www.cnblogs.com/wjh123/p/11129548.html

时间: 2024-09-30 23:36:29

java面试-synchronized与lock有什么区别?的相关文章

java面试题之synchronized和lock有什么区别

synchronized和lock的区别: 类别 synchronized lock 存在层次 java的关键字,在jvm层面上 是一个类 锁的释放 1.以获取锁的线程执行完同步代码,释放锁 2.线程执行发生异常,jvm会让线程释放锁 在finally中必须释放锁,不然容易造成线程死锁 锁的获取 假设A线程获得锁,B线程等待, 如果A线程阻塞,B线程会一直等待 分情况而定,lock有多个锁获取的方法,可以尝试获得锁, 线程可以不用功一直等待 锁状态 无法判断 可以判断 锁类型 可以重入,不可以中

Java中synchronized和Lock的区别

synchronized和Lock的区别synchronize锁对象可以是任意对象,由于监视器方法必须要拥有锁对象那么任意对象都可以调用的方法所以将其抽取到Object类中去定义监视器方法这样锁对象和监视器对象是同一个,只要创建了锁对象它既是锁对象同时也是监视器对象这样不能实现在一个锁对象上绑定多个监视器对象jdk1.5中Lock对象仅仅是一个锁对象监视器方法被封装到了Condition对象中这样实现了锁对象和监视器对象进行了分离更加的面向对象这样可以实现在一个锁对象上绑定多个监视器对象 在一个

java中synchronized与lock的理解与应用

总结来说,Lock和synchronized有以下几点不同: 1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现: 2)synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生:而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁: 3)Lock可以让等待锁的线程响应中断,而synchronized却不行,使用synchr

Java线程 synchronized、Lock、Condition

java.util.concurrent.lock 中的Lock 框架是锁定的一个抽象,它允许把锁定的实现作为 Java 类,而不是作为语言的特性来实现.这就为Lock 的多种实现留下了空间,各种实现可能有不同的调度算法.性能特性或者锁定语义. ReentrantLock 类实现了Lock ,它拥有与synchronized 相同的并发性和内存语义,但是添加了类似锁投票.定时锁等候和可中断锁等候的一些特性.此外,它还提供了在激烈争用情况下更佳的性能.(换句话说,当许多线程都想访问共享资源时,JV

Synchronized和lock的区别和用法

一.synchronized和lock的用法区别 (1)synchronized(隐式锁):在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象. (2)lock(显示锁):需要显示指定起始位置和终止位置.一般使用ReentrantLock类做为锁,多个线程中必须要使用一个ReentrantLock类做为对 象才能保证锁的生效.且在加锁和解锁处需要通过lock()和unlock()显示指出.所以一般会在finally块中写unloc

synchronized 与 lock 的区别

synchronized 和 lock 的用法区别 synchronized(隐式锁):在需要同步的对象中加入此控制,synchronized 可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象. lock(显示锁):需要显示指定起始位置和终止位置.一般使用 ReentrantLock 类做为锁,多个线程中必须要使用一个 ReentrantLock 类做为对象才能保证锁的生效.且在加锁和解锁处需要通过 lock() 和 unlock() 显示指出.所以一般会在 finally 块中写

java面试需要明确了解的内容

项目相关: 1.明确项目是做什么的 2.明确项目的价值.(为什么做这个项目,它解决了用户什么痛点,它带来什么价值?) 3.明确项目的功能.(这个项目涉及哪些功能?) 4.明确项目的技术.(这个项目用到哪些技术?) 5.明确个人在项目中的位置和作用.(你在这个项目的承担角色?) 6.明确项目的整体架构. 7.明确项目的优缺点,如果重新设计你会如何设计. 8.明确项目的亮点.(这个项目有什么亮点?) 9.明确技术成长.(你通过这个项目有哪些技术成长?) Java基础 1.List 和 Set 的区别

synchronized关键字,Lock对象,阻塞队列问题

一.   请你谈一谈synchronized和lock有什么区别? 1.synchronized是java的关键字,属于jvm层面,底层是通过moninter对象实现的.Lock是具体的接口,属于api层面. 2.synchronized不需要用户去手动释放锁,当synchronized的代码执行完成后,系统会自动释放线程对锁的占用,Lock 则需要用户去手动释放锁,如果没有主动去释放锁,就会导致死锁的发生. 3.synchronized不可被中断,除非程序执行完毕或抛出异常.Lock可以被中断

Java面试之多线程

35. 并行和并发有什么区别? 并行:多个处理器或多核处理器同时处理多个任务. 并发:多个任务在同一个 CPU 核上,按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是同时执行. 如下图: 并发 = 两个队列和一台咖啡机. 并行 = 两个队列和两台咖啡机. 36. 线程和进程的区别? 一个程序下至少有一个进程,一个进程下至少有一个线程,一个进程下也可以有多个线程来增加程序的执行速度. 37. 守护线程是什么? 守护线程是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待