- 面试的时候遇到了题目关于synchronize 和static synchronized的问题 , 如题
其实我的理解 完全偏差 , 因此回来后认真的研究了下, 写了个simpleDemo 供大家参考,
总结: synchronized 加到方法前面 和 synchronized{ xxxxxxx} 代码块类似 , 都是synchronized(this){xxxx}(有木有感觉很可怕?)
将该对象 加锁, 记住, 是锁住整个对象, 若static的synchronized则锁的是这个class, 所以答案也就一目了然了。
追求性能的话, 建议大家慎用synchronized
答案:
不能
不能
不能
不能
能
demo 如下
package cn.com.flaginfo; import java.util.Date; import java.util.concurrent.TimeUnit; public class A { private static boolean isTrue; private static Object sss = new Object(); public static synchronized void staticWrite(boolean b) throws InterruptedException{ System.out.println("staticWrite·" + new Date()); TimeUnit.SECONDS.sleep(2); isTrue = b; } public static synchronized boolean staticRead() throws InterruptedException{ System.out.println("staticRead·"+ new Date()); TimeUnit.SECONDS.sleep(2); return isTrue; } public synchronized void write(boolean b) throws InterruptedException{ System.out.println("write·"+ new Date()); TimeUnit.SECONDS.sleep(2); isTrue = b; } public void write1(boolean b) throws InterruptedException{ synchronized(sss){ System.out.println("write·"+ new Date()); TimeUnit.SECONDS.sleep(2); isTrue = b; } } public synchronized boolean read() throws InterruptedException{ System.out.println("read·"+ new Date()); TimeUnit.SECONDS.sleep(2); return isTrue; } public static void main(String[] args) throws Exception{ final A a = new A(); new Thread(new Runnable(){ @Override public void run() { try { System.out.println("调用staticWrite(true)"); a.write(true); // A.staticWrite(true); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); TimeUnit.MILLISECONDS.sleep(200); new Thread(new Runnable(){ @Override public void run() { try { System.out.println("调用staticRead()"); // A.staticRead(); a.read(); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } }
相关推荐
《Java面试宝典2018版》是一本专门针对Java面试的知识点整理,涵盖了Java基础、面向对象...以上知识点是根据《Java面试宝典2018版》部分内容进行的总结,为准备Java面试的开发者提供了一个清晰的知识框架和复习重点。
了解这些核心概念和技术,对于准备Java面试,尤其是针对J2EE领域的职位,具有至关重要的作用。深入理解并熟练掌握这些知识点,不仅能够帮助求职者在面试中脱颖而出,也能为未来的职业发展奠定坚实的基础。
标题和描述中提到的Java面试题包含多个方面的知识点,涵盖Java基础、算法、架构设计、设计模式等。下面详细说明各方面的知识点。 Java基础知识点: 1. 关于Java中为什么等待和通知是Object类的成员方法而不是Thread...
从给定的文件信息中,我们可以提炼出一系列与北大青鸟JAVA面试相关的知识点,这些知识点涵盖了JAVA编程语言的基础概念、异常处理、面向对象特性、线程管理、内存管理以及垃圾回收机制等关键领域。下面是对这些知识点...
Java是一种广泛使用的面向对象的编程语言,其设计目标是具有...这些知识点是Java面试中的核心部分,深入理解和掌握它们对于提升个人的编程能力和解决实际问题的能力至关重要。不断练习和实践,才能在面试中游刃有余。
Java面试宝典2017版是一本针对Java开发者准备面试的重要参考资料,涵盖了广泛的Java相关技术、算法、编程以及Web开发等内容。以下是根据书中的部分目录和问题,详细阐述的一些关键知识点: 1. Java基础部分: - `...
以下是Java面试要点的详细知识点总结: 基础篇 1. JVM 内存结构:堆、栈、方法区、直接内存、堆和栈区别 2. Java 内存模型:内存可见性、重排序、顺序一致性、volatile、锁、final 3. 垃圾回收:内存分配策略、...
Java面试资料汇总的知识点可以从多个方面来总结: 面向对象的编程特性包括封装、继承、多态和抽象,它们是...以上是Java面试资料汇总中提及的部分知识点总结,更多详细内容需要结合具体问题和实际场景进行深入探讨。
Java面试宝典2015版的这部分内容主要涉及了Java语言基础知识、异常处理、多线程和面向对象的概念等多个方面,以下是详细的解释。 1. Java基础部分: - 一个".java"源文件中可以包括多个类,但只能有一个公共类...
以上是根据华为2018年深圳Java面试题的相关内容总结的知识点,涵盖了Java中的修饰符、字符串类的使用和性能、静态与实例变量、继承与接口的概念和区别、集合框架中HashMap与Hashtable的异同以及抽象类与接口的对比。...
Java面试宝典包含了Java基础、面向对象、异常处理、多线程以及集合框架等多个方面的问题和解答,是求职者准备Java面试时的重要参考。以下是根据文档内容归纳的知识点: 1. Java基础部分: - Java源文件中可以包括多...
大家在学习java多线程的时候肯定会遇到这个问题,而且在面试的时候也可能会谈到java多线程这一块的知识。今天我们就来看看这个东西~~~ synchronized 这个是对类实例进行加锁,可以简称为“实例锁”或者是“对象锁”...
Java面试宝典是Java开发者面试的必备知识点总结,涵盖了Java基础知识、Java面向对象编程、Java多态、Java继承、Java接口、Java抽象类、Java内部类、Java静态变量、Java构造器、Java重载和覆盖等方面。 Java基础知识...
【Java面试】 Java面试是检验开发者技能的重要环节,涵盖了语法、数据结构、算法、框架、设计模式等多个方面。在Java面试中,常见的知识点包括: 1. 基本概念:理解面向对象编程(OOP)的核心概念,如封装、继承、...
【JAVA程序员面试32问详解】 1. **final, finally, finalize的区别** - `final`:修饰类、...以上是部分Java面试常见问题的解析,全面准备面试还需深入学习Java核心、并发编程、数据库、框架、设计原则等多个方面。
这些知识点涵盖了Java开发的基本技能和高级特性,深入理解和熟练应用这些知识点对于在Java面试中脱颖而出至关重要。准备面试时,不仅要掌握理论知识,还要通过编写代码和实际项目经验来提高解决问题的能力。
根据给定的文件内容,我们可以总结出一系列与Java面试相关的知识点。下面将详细解析每一道题目涉及的关键概念。 ### 第一部分:基础知识 #### 1. final, finally, finalize的区别 - **final**: 用于声明变量、方法...
在Java面试中,考察的知识点广泛且深入,包括基础语法、类与对象、内部类、继承、异常处理、多线程、集合、I/O流以及虚拟机原理等多个方面。下面是对这些知识点的详细解释: 1. **基本语法**:Java的基本语法包括...