首页 热点资讯 义务教育 高等教育 出国留学 考研考公

面试synchronized和locak有什么异同

发布网友 发布时间:2022-03-25 01:44

我来回答

2个回答

懂视网 时间:2022-03-25 06:05

synchronized和lock的异同如下:

  

  1、首先synchronized是java内置关键字,在jvm层面,Lock是个java类;

  

  2、synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;

  

  3、synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;

  

  4、用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2则会一直等待下去,而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束了;

  

  5、synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者皆可);

  

  6、Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题。

热心网友 时间:2022-03-25 03:13

一、synchronized和lock的用法区别

synchronized:在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。

lock:需要显示指定起始位置和终止位置。一般使用ReentrantLock类做为锁,多个线程中必须要使用一个ReentrantLock类做为对象才能保证锁的生效。且在加锁和解锁处需要通过lock()和unlock()显示指出。所以一般会在finally块中写unlock()以防死锁。

二、synchronized和lock用途区别

synchronized原语和ReentrantLock在一般情况下没有什么区别,但是在非常复杂的同步应用中,请考虑使用ReentrantLock,特别是遇到下面2种需求的时候。

1.某个线程在等待一个锁的控制权的这段时间需要中断
2.需要分开处理一些wait-notify,ReentrantLock里面的Condition应用,能够控制notify哪个线程
3.具有公平锁功能,每个到来的线程都将排队等候

ThreadLocal和synchronized的区别 如何处理高并发 集合结构分析&线程并发库 2021面试网络工程师的题目 JAVA 中的同步机制有什么作用? 如何处理多线程并发时的日志追踪 ThreadLocal共享线程局部变量和线程同步机制的区别 Java中的ThreadLocal通常是在什么情况下使用的 什么是线程安全以及threadlocal为什么是线 threadLocal是要解决什么问题
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com