当前位置: 首页 > article >正文

java并发面试复习

1synchronized和ReentranLock的区别

共同点:

  a. 都是用来协调多线程对共享对象,变量的访问

  b.都是可重入锁,同一线程可以多次获得同一个锁

  c. 都保证了互斥性和可见性

不同点:

a.ReentranLock显示的获得,释放锁,synchronized隐式获得释放锁

b.ReentranLock是API级别的,synchroized是JVM级别的

c.ReentranLock是可以实现公平锁的

d.底层实现不一样,synchronized是同步阻塞的,使用的是悲观并发策略,lock是同步非阻塞的,采用的乐观并发策略

e.synchronized在发生异常的时候,会主动释放线程占有的锁,因此不会导致死锁的现象发生,Lock在发生异常的时候,如果没有主动通过unLock方法释放,则很可能造成死锁的现象,因此在使用的时候需要在finally中进行释放锁

f.Lock可以知道有没有成功获取到锁,但是synchronized是无法知道是否成功获取到锁

g.Lock可以读写锁的实现,可以提高线程的工作效率,但synchronized是不能实现的

2.condition类和Object类锁方法的区别

1.condition类中await方法和object的wait方法等效

2.condition类中signal方法和object的notify方法等效

3.condition类中signalAll方法和object的notifyAll方法等效

4.Lock类可以唤醒指定条件的线程,而Object的唤醒是随机的


http://www.kler.cn/a/419048.html

相关文章:

  • 数据结构 (16)特殊矩阵的压缩存储
  • TiDB 无统计信息时执行计划如何生成
  • 【操作文档】mysql分区操作步骤.docx
  • 0017. shell命令--tac
  • 基于TensorFlow的手写体数字识别训练与测试
  • 五:OpenStack环境准备-compute node
  • MyBlog(五) -- 用户注册页面完善
  • 群控系统服务端开发模式-应用开发-短信工厂结构封装
  • Harmony NEXT-越过相机读写权限上传图片至项目云存储中
  • Solidity基础语法
  • 纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架
  • js对于json的序列化、反序列化有哪几种方法
  • 计算机网络基础篇
  • idea 自动导包,并且禁止自动导 *(java.io.*)
  • 数据结构之堆:原理与实现
  • 《Python基础》之类的定义、封装、继承
  • ubuntu 安装docker-compose
  • PHP操作redis删除指定前缀的key值
  • Apache storm安装教程(单机版)
  • 简单图论农场派对
  • 基于CentOS系统利用Kamailio搭建企业级SIP服务器
  • 青少年编程等级一级 自动打包机问题
  • learning_curve | 学习、理解以及使用学习曲线在评估型性能和诊断模型问题中的使用
  • 基于Matlab实现车牌识别系统(源码+图像)
  • WPF+MVVM案例实战与特效(二十九)- Combox绑定集合、枚举与固定值
  • matlab代码--卷积神经网络的手写数字识别