`
我是你超哥哥
  • 浏览: 8449 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

java面试之synchronized 和 static synchronized

阅读更多
  • 面试的时候遇到了题目关于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();
	}
}

 

  • 大小: 29.5 KB
分享到:
评论
1 楼 我是你超哥哥 2017-06-23  
大幅度萨芬撒地方

相关推荐

    Java面试经典题目

    了解这些核心概念和技术,对于准备Java面试,尤其是针对J2EE领域的职位,具有至关重要的作用。深入理解并熟练掌握这些知识点,不仅能够帮助求职者在面试中脱颖而出,也能为未来的职业发展奠定坚实的基础。

    一线互联网大厂完整Java面试题.pdf

    1. synchronized和volatile关键字都可以实现线程之间的通信。 2. Lock提供了更灵活的锁机制,与synchronized相比,Lock提供了无条件的、可轮询的、定时的、可中断的锁获取操作。 3. Java中提供了偏向锁、自旋锁、轻...

    java面试笔试题库.rar

    为了在Java面试中脱颖而出,了解和掌握基础的Java知识至关重要。这份“java面试笔试题库”包含了广泛的话题,旨在帮助求职者巩固核心概念,提升面试表现。下面我们将深入探讨其中可能涉及的关键知识点。 1. **Java...

    Java面试之——代码与编程题

    【Java面试之——代码与编程题】是Java程序员在求职过程中常常遇到的面试环节,主要考察应聘者对Java语言的理解和实际操作能力。面试中,面试官可能会提出各种类型的编程题目,包括但不限于设计模式、继承机制、内部...

    Java面试宝典2017pdf

    25. abstract方法不可以同时是static和synchronized的,但可以是native的。 26. 内部类是可以嵌套在另一个类里面定义的类。StaticNestedClass和InnerClass的主要区别是InnerClass可以访问外部类的实例变量和方法,...

    Java面试宝典2017 下载 高清完整PDF版

    Java是一种广泛使用的编程语言,在面试中经常会出现涉及Java...以上知识点覆盖了Java基础、面向对象特性、异常处理、多线程同步和异步处理等多个方面,对于准备Java面试的求职者来说,这些内容是不可或缺的基础知识。

    Java面试测试题目2018张大成总结

    ### Java面试测试题目知识点梳理 #### 1. int和Integer有什么区别? - **int**: 是Java的基本数据类型之一,用于存储整数值。占用4个字节的空间,取值范围为-2^31到2^31-1。 - **Integer**: 是int的包装类,实现了...

    java面试题.txt.rar

    "java面试题.txt"这个压缩包文件很可能包含了Java面试中常见的问题和答案,帮助求职者准备面试。以下是一些可能涵盖的Java知识点: 1. **基础概念**: - Java的起源与特点:理解Sun Microsystems的James Gosling...

    java面试题经典32问

    ### Java面试题经典32问解析 #### 一、final,finally,finalize的区别 - **final**:这是一个关键字,用于修饰类、变量或方法。如果一个类被声明为`final`,表示它不能被继承,即不能有子类。同样地,如果一个...

    Java面试宝典2013_PDF版.pdf

    Java面试宝典通常是求职者在准备面试时的参考资料,帮助他们复习Java相关知识点,梳理和巩固基础。下面,我们将详细探讨文档中提到的Java知识点: 1. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么...

    Java面试宝典2017

    ### Java面试宝典2017知识点解析 #### 1. 多个类在一个源文件中的限制 在Java中,一个`.java`源文件可以包含多个类,但是必须遵守以下规则: - 源文件中只能有一个公共类(public class),且该类名必须与文件名...

    java面试题总结.docx

    Java编程语言在面试中常常涉及的关键知识点包括方法的重载...在Java面试中,了解并掌握这些概念对于展示自己的专业技能和解决问题的能力至关重要。同时,熟悉数据库设计和优化策略,能够体现你在实际项目中的应用能力。

    Java面试宝典2018

    ### Java面试宝典2018 - Java基础知识详解 #### 1. 在一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 在一个`.java`源文件中可以包含多个类,但是有以下限制: - **公共类(public class)**...

    JAVA面试题JAVA面试题JAVA面试题

    - abstract 不能与 static 和 synchronized 同时使用。 - native 不能与 abstract 同时使用。 - synchronized 可以与 abstract 或 static 同时使用。 22. **接口继承**:接口可以继承接口,抽象类可以实现接口,...

    Java面试葵花宝典

    《Java面试葵花宝典》是一本针对求职者在面试过程中可能遇到的问题提供解答和技巧的书籍,旨在帮助求职者掌握Java编程和相关技术知识,以便顺利通过面试环节。以下是从书中提炼出的Java面试知识点: 1. Java基础...

    Java面试宝典2017.zip

    25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 18 26、什么是内部类?Static Nested Class 和 Inner Class的不同。 19 27、内部类可以引用它的包含类的成员吗?有没有什么...

    Java程序员面试笔试题

    Java程序员在面试和笔试过程中,会遇到各种技术性问题,这些题目主要涵盖了Java语言的核心特性、面向对象编程、集合框架、多线程、异常处理、IO流、网络编程、数据库操作以及SQL语句等关键领域。以下是对这些知识点...

    corejava_面试题

    Java基础知识讲解与面试题分析: 1. Java源文件中是否可以包含多个类? 是的,一个".java"源文件中可以包含多个类,但只能有一个公共类(public class),并且该公共类的名称必须与文件名相同。其他非公共类的数量...

    JAVA 面试题集 pdf

    ### JAVA面试题集知识点解析 #### 一、异常处理机制 **知识点概述:** 异常处理是Java编程语言中用于管理程序执行过程中可能出现的错误的重要机制。通过异常处理,程序员能够优雅地处理各种运行时错误,避免程序...

    java面试宝典

    ### Java面试宝典知识点详解 #### 一、Java基础部分 **1. 一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?** 在一个`.java`源文件中可以定义多个类,但有一个重要的限制:每个源文件只能有...

Global site tag (gtag.js) - Google Analytics