`

面试-java锁--synchronized

 
阅读更多

面试-java锁--synchronized

 

0、synchronized  隐式锁

 

1、锁的目的:控制并发,防止多线程修改数据出问题。

 

2、最简单的 -- synchronized

 

2.1 Monitor

            Java虚拟机给每个对象和class字节码都设置了一个监听器Monitor。

              

  

  

 

           

    Synchronized经过编译,会在同步块的前后分别形成monitorenter和monitorexit这个两个字节码指令。

    在执行monitorenter指令时,首先要尝试获取对象锁。

    如果这个对象没被锁定,或者当前线程已经拥有了那个对象锁,把锁的计算器加1,

    相应的,在执行monitorexit指令时会将锁计算器就减1,当计算器为0时,锁就被释放了。

    如果获取对象锁失败,那当前线程就要阻塞,直到对象锁被另一个线程释放为止。

 

  问题或特性:

          1、不能中断

                   事实上线程的中断操作对于正在等待获取的锁对象的synchronized方法或者代码块并不起作用,

                也就是对于synchronized来说,如果一个线程在等待锁,那么结果只有两种,

                要么它获得这把锁继续执行,要么它就保持等待,即使调用中断线程的方法,也不会生效

           

           2、非公平

                获取不到锁的时候,会自动加入队列,等待线程释放锁后所有等待的线程同时去竞争

 

          3、无法设置超时

 

          4、随机唤醒一个线程要么唤醒全部线程

 

          5、jdk 1.6的优化前 性能较低:

                        Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。

                          但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock(操作系统的互斥锁)来实现的。

                          而操作系统实现线程之间的切换这就需要从用户态转换到核心态,这个成本非常高,

                         状态之间的转换需要相对比较长的时间,这就是为什么Synchronized效率低的原因。

                         因此,这种依赖于操作系统Mutex Lock所实现的锁我们称之为“重量级锁”。

 

  • 大小: 84.5 KB
分享到:
评论

相关推荐

    2023黑马面试宝典-Java面试宝典大全-java面试宝典黑马

    4. **多线程**:Java提供了丰富的多线程支持,面试中会考察线程的创建、同步机制(synchronized、Lock)、死锁、线程池等。理解线程状态转换图,掌握线程安全问题的解决方案,如volatile、ThreadLocal等,有助于在...

    面试-Java一些常见面试题+题解之多线程开发-JavaConcurrent.zip

    Java提供了synchronized关键字,它可以修饰方法或代码块,实现临界区的保护。 - volatile关键字确保变量在多线程环境下的可见性,但不能保证原子性。 4. **线程通信** - wait(), notify()和notifyAll()是Object类...

    java面试——深圳-OPPO-Java高级.zip

    在Java高级面试中,面试官通常会关注应聘者对核心概念、高级特性和实际问题解决能力的掌握。针对“深圳-OPPO-Java高级”这个主题,我们可以预想面试会涵盖多个关键知识点,包括但不限于: 1. **Java基础**: - 类...

    阿里面试-Java面试八股文

    - 并发是多线程环境下的关键概念,面试中会涉及到synchronized、volatile、Lock、ThreadLocal等关键字以及线程池的使用和优化。 - 高级并发面试专题将深入探讨并发模型、并发工具类、并发设计模式等高级话题。 5....

    面试-Java一些常见面试题+题解之算法-Algorithm.zip

    Java编程语言在IT行业中占有重要地位,特别是在求职面试中,Java相关的知识,尤其是算法,是面试官考察候选人技术能力的重要方面。本资料包"面试-Java一些常见面试题+题解之算法-Algorithm.zip"正是为了帮助求职者...

    java私塾面试题----JAVA代码与编程3

    Java私塾面试题----JAVA代码与编程3涵盖了Java编程中的核心知识点,这些是面试官在评估候选人技术能力时经常会问到的问题。以下是一些关键的知识点解析: 1. **基本语法**:Java是一种强类型、面向对象的语言,面试...

    计算机后端-Java-Java高并发从入门到面试教程-课程准备.zip

    在本课程"计算机后端-Java-Java高并发从入门到面试教程-课程准备"中,我们将深入探讨Java编程语言在处理高并发场景下的核心概念和技术。Java是企业级应用开发的重要选择,尤其是在大型分布式系统中,其强大的并发...

    面试-Java一些常见面试题+题解之JavaSE-JavaSE.zip

    对于Java开发者来说,掌握JavaSE是必备技能,也是面试中经常被考察的知识点。下面我们将深入探讨JavaSE中的一些常见面试题及其解答。 1. **Java基础** - **对象与类**:Java是一种面向对象的语言,理解类和对象的...

    计算机后端-Java-Java高并发从入门到面试教程-课程总结.zip

    在本课程中,我们深入探讨了Java高并发编程这一核心领域,这不仅是Java开发者必备的技能,也是在面试中常被考察的知识点。这个“计算机后端-Java-Java高并发从入门到面试教程”旨在帮助初学者和有经验的开发者们掌握...

    面试-Java一些常见面试题+题解之安卓开发-Android.zip

    本文将深入探讨在面试中可能会遇到的一些Java和Android开发相关的常见问题及解答,帮助求职者更好地准备面试。 1. **Java基础** - **数据类型**: 分为基本类型(如int, double, boolean)和引用类型(如类、接口、...

    java面试题-java-interview-questions-master.zip

    java面试题_java-interview-questions-master.zip2、在 Java 程序中怎么保证多线程的运行安全? 出现线程安全问题的原因一般都是三个原因: 1、 线程切换带来的原子性问题 解决办法:使用多线程之间同步...

    计算机后端-Java-Java高并发从入门到面试教程-并发基础.zip

    本教程“计算机后端-Java-Java高并发从入门到面试教程-并发基础.zip”旨在帮助开发者从零开始学习并掌握Java并发的基础知识,以应对实际项目中的挑战和面试中的相关问题。 首先,我们需要理解Java并发的基础概念。...

    2020年最新版--Java+最常见的+200++面试题汇总+答案总结汇总

    在Java编程语言中,基础知识是面试中不可或缺的部分。JDK(Java Development Kit)是Java开发工具包,包含开发和运行Java程序所需的所有工具,如JRE(Java Runtime Environment)、编译器Javac以及调试工具等。JRE则...

    面试-Java一些常见面试题+题解之操作系统-OperatingSystem.zip

    在Java面试中,操作系统(Operating System,简称OS)的相关知识是不可或缺的一部分,因为Java作为跨平台的语言,其性能和效率与操作系统密切相关。本篇将详细探讨操作系统与Java面试中的常见问题,帮助求职者更好地...

    JAVA笔试面试宝典--JAVA笔试面试必看

    为了在Java面试中脱颖而出,了解并掌握核心的Java知识至关重要。本“JAVA笔试面试宝典”旨在为准备Java面试的开发者提供详尽的指导,帮助你充分准备,增加成功的机会。 一、Java基础 1. Java语法:理解基本的类、...

    java面试题--java面试题

    Java面试题是每个Java开发者在求职过程中必须面对的挑战,这些题目涵盖了广泛的Java知识领域,包括基础语法、面向对象编程、集合框架、多线程、异常处理、内存管理、JVM、网络编程、设计模式等。下面将针对这些重要...

    精品--JAVA 面试宝典和简历模板V3.zip

    面试中可能会讨论线程的创建方式、同步机制(synchronized、volatile、Lock接口)、死锁、线程池(ExecutorService)以及并发工具类如Semaphore、CountDownLatch等。 4. **设计模式**:设计模式是解决常见软件设计...

    java并发锁面试知识

    java中的乐观锁与悲观锁,synchronized与ReentrantLock重入锁的说明与比较

    计算机后端-Java-Java高并发从入门到面试教程-发课程资料.zip

    这个课程资料主要涵盖了从基础知识到面试必备的Java并发知识体系。以下是对这些主题的详细讲解: 1. **并发基础** - **线程与进程**:了解操作系统中的线程和进程概念,它们之间的区别以及在多任务环境下的作用。 ...

Global site tag (gtag.js) - Google Analytics