1. 如何实现乐观锁(CAS)?如何避免ABA问题?
 答:1)读取内存值的方式实现了乐观锁(比如:SVN系统),方法:第一,比较内存值和期望值;第二,替换内存值为要替换值。
        2)带参数版本来避免aba问题,在读取和替换的时候进行判定版本是否一致

2. 读写锁可以用于什么应用场景?
 答: 读写锁可以用于 “多读少写” 的场景,读写锁支持多个读操作并发执行,写操作只能由一个线程来操作
        ReadWriteLock对向数据结构相对不频繁地写入,但是有多个任务要经常读取这个数据结构的这类情况进行了优化。ReadWriteLock使得你可以同事有多个读取者,只要它们都不试图写入即可。如果写锁已经被其他任务持有,那么任何读取者都不能访问,直至这个写锁被释放为止。
        ReadWriteLock 对程序心性能的提高受制于如下几个因素也还有其他等等的因素。
          1)数据被读取的频率与被修改的频率相比较的结果。
          2)读取和写入的时间
          3)有多少线程竞争
          4)是否在多处理机器上运行

3. 什么时候应该使用可重入锁?
 答:重入锁指的是在某一个线程中可以多次获得同一把锁,在线程中多次操作有锁的方法。

4. 什么场景下可以使用volatile替换synchronized?
 答: 只需要保证共享资源的可见性的时候可以使用volatile替代,synchronized保证可操作的原子性一致性和可见性。volatile适用于新值不依赖于就值的情形。
      volatile是java提供的一种同步手段,只不过它是轻量级的同步,为什么这么说,因为volatile只能保证多线程的内存可见性,不能保证多线 程的执行有序性。而最彻底的同步要保证有序性和可见性,例如synchronized。任何被volatile修饰的变量,都不拷贝副本到工作内存,任何 修改都及时写在主存。因此对于Valatile修饰的变量的修改,所有线程马上就能看到,但是volatile不能保证对变量的修改是有序的。volatile存在的意义是,任何线程对某个变量的修改,都会马上被其他线程读取到,因为直接操作主存, 没有线程对工作内存和主存的同步。所以,volatile的使用场景是有限的,在有限的一些情形下可以使用 volatile 变量替代锁(synchronized)。
       要使 volatile 变量提供理想的线程安全,必须同时满足下面两个条件:
               1)对 变量的写操作不依赖于当前值。
               2)该变量没有包含在具有其他变量的不变式中

转载于:https://www.cnblogs.com/yeahwell/p/4544559.html

Java面试题-Java中的锁相关推荐

  1. Java面试题之:数据库锁

    Java面试题之:数据库锁 一.行级锁 二.表级锁 三.页级锁 一.行级锁   行级锁是一种排他锁,防止其他事务修改此行:在使用以下语句时,Oracle 会自动应用行级锁: INSERT.UPDATE ...

  2. Java面试题之:乐观锁、悲观锁与自旋锁及其相关锁的优化(万字知识点详解)

    Java面试题之:乐观锁.悲观锁与自旋锁及其锁的优化 一.乐观锁 二.悲观锁 三.自旋锁 ①自旋锁的优缺点 ②自旋锁时间阈值(1.6 引入了适应性自旋锁) ③自旋锁的开启 四.Synchronized ...

  3. Java与C语言中的锁

    Java与C语言中的锁 C 嵌入式汇编的语法格式是: asm(code : output operand list : input operand list : clobber list) __asm ...

  4. 复习Java小球游戏代码分享Java面试题MySQL中常用的锁生活【记录一个咸鱼大学生三个月的奋进生活】021

    记录一个咸鱼大学生三个月的奋进生活021 复习Java小球游戏 游戏界面的代码 小球运动线程的代码 运行游戏的代码 运行结果 代码分享 学习Java面试题(MySQL中常用的锁) 照片分享 复习Jav ...

  5. java 锁定界面_Java中的锁

    java中的锁遵循不同的分类方法,太多了,乐观锁/悲观锁,可重入锁/不可重入锁,有些第一遇到的话,可能还有点懵.刚好周末有时间学习下,总结和梳理下. 一总述 总的来说对java的锁有以下七种分类方法: ...

  6. 中软融鑫 java笔试题_中软国际java笔试题

    中软国际Java程序员笔试题 Java程序员笔试题 1.谈谈final, finally, finalize的区别. 2.Anonymous Inner Class (匿名内部类) 是否可以exten ...

  7. java面试题——java基础(四),java初级面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  8. JAVA面试题|JAVA锁相关面试题总结(一)

    JAVA基础篇面试题 文章目录 JAVA基础篇面试题 1. 什么是JMM 2. 介绍一下violated 3. 写一个单例模式 4. 介绍一下CAS 5. CAS的问题 6. ArrayList线程不 ...

  9. Java工作笔记/Java面试题/Java八股文/Java常用API

    码农工具包 hutool工具 hutool工具类判断各种类型数据 <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --& ...

  10. java面试题(java中高级面试题及答案)

    [java面试题] 1.Collections.sort排序内部原理 在Java6Arrays.sort()和Collections.sort()中使用MergeSort,在Java7中,内部实现被T ...

最新文章

  1. PHP变量的变量——可变变量
  2. ffmpeg的编译大全
  3. 关羽在韩国有块私家地?
  4. diss范式:明星AI公司秋招被爆大规模毁约;CEO戴文渊:责任在我有错认罚
  5. js获取当天0点和24点的时间戳
  6. python的with用法
  7. 运行 Excel 脚本
  8. Unity实现刺客信条灯光的思路探究
  9. java rhino js类_Rhino -- 基于java的javascript实现
  10. 收藏夹吃灰系列(二):教小师妹通过代码实现Swagger在线接口文档转word文档!教完后...?
  11. angr分析程序的控制流图CFG
  12. python经济学_用python学习中级微观经济学【WARP篇】
  13. HTTP协议的默认端口是什么?底层原理是什么?
  14. PLS-00907: cannot load library unit
  15. 【Java】抽象类继承的综合案例
  16. 求1!+2!+3!+…+n!(2种方式)
  17. 中文的括号和英文的括号区别_小括号、中括号、大括号,英文怎么说?
  18. Mysql5.1 , Mysql5.5, Mysql5.7, Mysql8.0各个版本性能对比
  19. LZMA压缩/解压缩工具命令行用法参考
  20. Ubuntu 16.04 英伟达驱动、常用软件以及虚拟环境的安装

热门文章

  1. Error fetching https://gems.ruby-china.org/: bad response Not Found 404 (https://gems.ruby-china.or
  2. DirEqual for Mac(文件夹快速比较工具)
  3. AirPods耳机mac端管理工具:AirBuddy
  4. 如何在Mac上使用Memoji贴纸、屏幕效果、应用程序和Messages
  5. 11.20日个人工作总结
  6. Ubuntu 下 matplotlib 中文乱码
  7. Apache启用GZIP压缩网页传输方法
  8. 设为首页 添加到收藏夹 (share)
  9. CentOS6.2安装LAMP+DRUPAL网站(1)
  10. 数据结构(四)之冒泡排序