面试-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所实现的锁我们称之为“重量级锁”。
相关推荐
4. **多线程**:Java提供了丰富的多线程支持,面试中会考察线程的创建、同步机制(synchronized、Lock)、死锁、线程池等。理解线程状态转换图,掌握线程安全问题的解决方案,如volatile、ThreadLocal等,有助于在...
Java提供了synchronized关键字,它可以修饰方法或代码块,实现临界区的保护。 - volatile关键字确保变量在多线程环境下的可见性,但不能保证原子性。 4. **线程通信** - wait(), notify()和notifyAll()是Object类...
在Java高级面试中,面试官通常会关注应聘者对核心概念、高级特性和实际问题解决能力的掌握。针对“深圳-OPPO-Java高级”这个主题,我们可以预想面试会涵盖多个关键知识点,包括但不限于: 1. **Java基础**: - 类...
- 并发是多线程环境下的关键概念,面试中会涉及到synchronized、volatile、Lock、ThreadLocal等关键字以及线程池的使用和优化。 - 高级并发面试专题将深入探讨并发模型、并发工具类、并发设计模式等高级话题。 5....
Java编程语言在IT行业中占有重要地位,特别是在求职面试中,Java相关的知识,尤其是算法,是面试官考察候选人技术能力的重要方面。本资料包"面试-Java一些常见面试题+题解之算法-Algorithm.zip"正是为了帮助求职者...
Java私塾面试题----JAVA代码与编程3涵盖了Java编程中的核心知识点,这些是面试官在评估候选人技术能力时经常会问到的问题。以下是一些关键的知识点解析: 1. **基本语法**:Java是一种强类型、面向对象的语言,面试...
- **知识点**:多线程编程基础,包括线程生命周期、线程同步、锁机制、线程安全问题及其解决方案,如`synchronized`关键字和`Lock`接口的使用。 **1.11 JAVA面试题解惑系列(十一)——这些运算符你是否还记得?** ...
在本课程"计算机后端-Java-Java高并发从入门到面试教程-课程准备"中,我们将深入探讨Java编程语言在处理高并发场景下的核心概念和技术。Java是企业级应用开发的重要选择,尤其是在大型分布式系统中,其强大的并发...
对于Java开发者来说,掌握JavaSE是必备技能,也是面试中经常被考察的知识点。下面我们将深入探讨JavaSE中的一些常见面试题及其解答。 1. **Java基础** - **对象与类**:Java是一种面向对象的语言,理解类和对象的...
在本课程中,我们深入探讨了Java高并发编程这一核心领域,这不仅是Java开发者必备的技能,也是在面试中常被考察的知识点。这个“计算机后端-Java-Java高并发从入门到面试教程”旨在帮助初学者和有经验的开发者们掌握...
本文将深入探讨在面试中可能会遇到的一些Java和Android开发相关的常见问题及解答,帮助求职者更好地准备面试。 1. **Java基础** - **数据类型**: 分为基本类型(如int, double, boolean)和引用类型(如类、接口、...
java面试题_java-interview-questions-master.zip2、在 Java 程序中怎么保证多线程的运行安全? 出现线程安全问题的原因一般都是三个原因: 1、 线程切换带来的原子性问题 解决办法:使用多线程之间同步...
本教程“计算机后端-Java-Java高并发从入门到面试教程-并发基础.zip”旨在帮助开发者从零开始学习并掌握Java并发的基础知识,以应对实际项目中的挑战和面试中的相关问题。 首先,我们需要理解Java并发的基础概念。...
在Java编程语言中,基础知识是面试中不可或缺的部分。JDK(Java Development Kit)是Java开发工具包,包含开发和运行Java程序所需的所有工具,如JRE(Java Runtime Environment)、编译器Javac以及调试工具等。JRE则...
在Java面试中,操作系统(Operating System,简称OS)的相关知识是不可或缺的一部分,因为Java作为跨平台的语言,其性能和效率与操作系统密切相关。本篇将详细探讨操作系统与Java面试中的常见问题,帮助求职者更好地...
为了在Java面试中脱颖而出,了解并掌握核心的Java知识至关重要。本“JAVA笔试面试宝典”旨在为准备Java面试的开发者提供详尽的指导,帮助你充分准备,增加成功的机会。 一、Java基础 1. Java语法:理解基本的类、...
Java面试题是每个Java开发者在求职过程中必须面对的挑战,这些题目涵盖了广泛的Java知识领域,包括基础语法、面向对象编程、集合框架、多线程、异常处理、内存管理、JVM、网络编程、设计模式等。下面将针对这些重要...
面试中可能会讨论线程的创建方式、同步机制(synchronized、volatile、Lock接口)、死锁、线程池(ExecutorService)以及并发工具类如Semaphore、CountDownLatch等。 4. **设计模式**:设计模式是解决常见软件设计...
java中的乐观锁与悲观锁,synchronized与ReentrantLock重入锁的说明与比较
这个课程资料主要涵盖了从基础知识到面试必备的Java并发知识体系。以下是对这些主题的详细讲解: 1. **并发基础** - **线程与进程**:了解操作系统中的线程和进程概念,它们之间的区别以及在多任务环境下的作用。 ...