`

java中synchronized锁对象的具体理解

    博客分类:
  • java
 
阅读更多

1.对于锁参数对象,只有参数对象是同一个对象时才会锁,不同的对象不会锁;

2.锁当前类对象,所有调用该类对象的情况下都会进行锁操作

总结的不好,可能理解不了,直接看代码和执行结果

锁参数对象:
public class TestThread {

	public static void main(String[] args) {
		T2 t2 = new T2();
		new T(t2,"lxl0").start();
		new T(t2,"lxl0").start();
		new T(t2,"lxl2").start();
		new T(t2,"lxl3").start();
	}
}

class T extends Thread {
	T2 t2;
	String userId;

	public T(T2 t2,String userId){
		this.t2 = t2;
		this.userId = userId;
	}
	public void run() {
		t2.m(userId);
	}
}

class T2{
	public void m(String userId) {
		System.out.println("m................");
		synchronized (userId) {
			try {
				System.out.println("userId:" + userId);
				Thread.sleep(5000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

-----------------------------------------------
执行结果:
m................
userId:lxl0
m................
m................
userId:lxl2
m................
userId:lxl3
userId:lxl0

2.锁类对象

锁类对象:
public class TestThread {

	public static void main(String[] args) {
		T2 t2 = new T2();
		new T(t2,"lxl0").start();
		new T(t2,"lxl0").start();
		new T(t2,"lxl2").start();
		new T(t2,"lxl3").start();
	}
}

class T extends Thread {
	T2 t2;
	String userId;

	public T(T2 t2,String userId){
		this.t2 = t2;
		this.userId = userId;
	}
	public void run() {
		t2.m(userId);
	}
}

class T2{
	public void m(String userId) {
		System.out.println("m................");
		synchronized (this) {
			try {
				System.out.println("userId:" + userId);
				Thread.sleep(5000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
-----------------------------
执行结果:
m................
userId:lxl0
m................
m................
m................
userId:lxl3
userId:lxl2
userId:lxl0

 

分享到:
评论

相关推荐

    synchronized锁原理分析(一、从Java对象头看synchronized锁的状态)

    synchronized关键字”锁”的实现本质 synchronized关键字实现的锁是依赖于JVM的,...上面这段代码,synchronized锁的其实是 o 这个对象,不是{}里面的代码块,synchronized (o)加锁的过程可以理解为,通过改变o这个对

    透彻理解Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别

    主要介绍了Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别,希望对大家有所帮助,一起跟随小编过来看看吧

    Java面试题.docx

    46、谈谈对Synchronized关键字,类锁,方法锁,重入锁的理解 49、synchronized 和volatile 关键字的区别 51-58题 51、ReentrantLock 、synchronized和volatile比较 53、死锁的四个必要条件? 56、什么是线程池...

    Java学习题答案

    (15分) 主要相同点: Lock能完成synchronized所实现的所有功能.(其它不重要) 主要不同点: Lock有比synchronized更精确的线程语义和更好的性能(在相同点中回答此点也行) synchronized会自动释放锁....

    涵盖了90%以上的面试题

    java中的数组是不是对象 数组初始化的方式有哪几种 length属性和length()方法有什么区别 finally块中的代码什么时候被执行 Java中的异常处理机制的简单原理和应用。 java socket java序列化 JVM加载class文件的原理...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    java基础案例与开发详解案例源码全

    5.4.4 Java中对象的创建和使用127 5.5 属性130 5.5.1 属性的定义130 5.5.2 变量131 5.6 方法132 5.6.1 方法的定义132 5.6.2 构造方法135 5.6.4 方法重载138 5.6.5 自定义方法138 5.6.6 系统提供方法139 5.6.7 方法...

    java并发编程理论基础精讲

    对象锁和监视器: 介绍对象锁的概念,解释如何使用 synchronized 关键字来实现对象级别的同步。 线程间通信: 详细讲解多线程之间如何进行通信,包括等待和通知机制、线程间的数据传递等。 死锁和解决: 介绍死锁的...

    Java高级工程师简历模板18k+

    1.具有扎实的Java基础,对面向对象编程有深刻的理解,熟练掌握java IO流、集合、多线程、反射,泛型,注解,网络编程等基础开发技术; 2.熟练使用常用的java集合类以及常用集合的源码,熟悉多线程以及同步容器以及...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    Java 中你可以凭借多态性,通过一个画圆的对象,来创建一个画椭圆或矩形的对象。不管是 画圆,画椭圆还是画矩形的方法,它们都有一个相同的方法名,但以不同的方式完成他们的 画圆的功能。 1.8 类和对象 1.8.1 ...

    Java面试宝典2020修订版V1.0.1.doc

    3、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 56 4、线程的基本概念 57 5、什么是多线程 57 6、程序、进程、线程之间的关系 57 7、创建线程有几种方式,分别是什么? ...

    java并发编程

    , 这里,读者将通过使用java.lang.thread类、synchronized和volatile关键字,以及wait、notify和notifyall方法,学习如何初始化、控制和协调并发操作。此外,本书还提供了有关并发编程的全方位的详细内容,例如限制...

    Java面试宝典-经典

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    图解java多线程设计模式

    java.util.concurrent包、synchronized关键字、Swing框架、Java内存模型等内容也均有涉及,不仅能够了解Java多线程的相关知识,还可加深对Java语言的理解。 本书适合以下读者阅读 a.对多线程感兴趣的人 b.对Java...

    Java面试宝典2010版

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    java面试题大全(2012版)

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    java面试题

    答:JDO是java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。 CORBA? 答:CORBA标准是公共对象请求代理结构,用途为:用不同的程序设计语言书写,在不同的...

Global site tag (gtag.js) - Google Analytics