`

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

 

分享到:
评论

相关推荐

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

    Java 中 Synchronized(对象锁)和 Static Synchronized(类锁)的区别 Synchronized 和 Static Synchronized 是 Java 中两种同步机制,它们都用于解决多线程并发访问的安全问题。然而,它们之间存在着本质的区别。...

    synchronized枷锁实例

    在Java编程语言中,`synchronized`...理解类锁、对象锁和方法锁的用法,以及它们之间的关系,对于编写高效、安全的多线程Java程序至关重要。通过SynchronizedDemo这个示例代码,我们可以进一步学习和实践这些概念。

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

    《深入剖析synchronized锁原理——从Java对象头的角度》 synchronized关键字在Java中扮演着重要的角色,它是Java实现同步的基础,确保了多线程环境下的数据一致性。不同于基于JDK实现的Lock接口(如ReentrantLock)...

    java同步synchronized关键字用法示例

    `synchronized`关键字的工作原理基于Java内存模型(JMM)中的锁机制。当一个线程进入同步代码块后,会获取到监视器对象的锁,其他试图进入的线程会被阻塞,直到持有锁的线程退出同步代码块并释放锁。 **3. volatile...

    Java synchronized使用案例

    Java中的`synchronized`关键字是多线程编程中的一个重要概念,用于控制并发访问共享资源,以保证数据的一致性和完整性。这个关键词提供了互斥锁机制,防止多个线程同时执行同一段代码,确保了线程安全。 一、`...

    java 多线程synchronized互斥锁demo

    压缩包中的`Long.java`文件可能包含了一个具体的示例,演示了如何使用`synchronized`关键字来控制对`Long`对象的访问。通常,这个例子会创建一个`Long`实例,并在多线程环境中使用`synchronized`关键字保护对这个...

    深入理解java中的synchronized关键字

    Java中的`synchronized`关键字是用于实现线程同步的关键机制,它的主要目的是确保在多线程环境中,对共享资源的访问能够保持数据的一致性和完整性。本文将深入探讨`synchronized`的两种主要用法:synchronized方法和...

    java多线程的条件对象和锁对象demo

    首先,我们需要了解Java中的锁对象。Java提供了多种类型的锁,其中最基础的是`synchronized`关键字,它可以确保同一时间只有一个线程访问特定的代码块或方法。另外,`java.util.concurrent.locks`包提供了更强大的锁...

    Java synchronized详细解读.docx

    总的来说,`synchronized`是Java中实现线程安全的关键工具,它通过锁机制保证了对共享资源的有序访问,防止了数据竞争问题。然而,正确使用`synchronized`需要对并发编程有深入理解,以确保性能和正确性之间的平衡。...

    基于Java synchronized同步锁实现线程交互.pdf

    "基于Java synchronized同步锁实现线程交互" Java多线程能够提高CPU利用...因此,在使用Java多线程的场景中,请充分理解Java线程各状态之间的关系及其切换,并使用synchronized、wait()和notify()方法实现线程交互。

    java 偏向锁、轻量级锁及重量级锁synchronized原理.docx

    Java中的`synchronized`关键字是实现线程安全的关键机制,它基于Java对象头的Mark Word进行锁的状态管理。Mark Word是一个动态变化的数据结构,用于存储对象的HashCode、分代年龄、锁状态标志等信息。在32位JVM中,...

    [JAVA][synchronized的使用]

    `synchronized`关键字在Java中提供了互斥访问,也就是说,当一个线程进入一个对象的`synchronized`代码块或方法时,其他线程对这个对象的`synchronized`代码块或方法的访问将会被阻塞,直到当前线程执行完毕并释放锁...

    Java synchronized关键_动力节点Java学院整理

    1. **对象锁**:每个Java对象都可以作为一个锁,当调用对象的`synchronized`方法或在代码块中使用`synchronized`关键字时,会获取到这个对象的锁。如果多个线程尝试访问同一个对象的同步代码,只有一个线程能够获得...

    java synchronized demo

    在Java编程语言中,`...总结,`java synchronized demo`是一个关于如何在Java中使用`synchronized`关键字进行线程同步的示例,通过理解和实践这个例子,开发者可以更好地掌握多线程环境下数据安全和同步的重要性。

    java关键字Synchronized详解

    总的来说,synchronized是Java中保证线程安全的重要工具,它通过锁机制实现了对共享资源的访问控制,但过度使用或不当使用可能会导致性能下降。理解其工作原理和优化策略,有助于编写高效、线程安全的Java代码。

    java-synchronized详解.doc

    Java中的`synchronized`关键字是多线程编程中的一个重要概念,用于控制并发访问共享资源,以保证数据的一致性和完整性。本文将深入解析`synchronized`在Java中的应用和工作原理。 一、`synchronized`的基本用法 `...

    Java 之 synchronized实现机制(monitor)及其优化(CAS操作、Java对象头、偏向锁).docx

    Java中的`synchronized`关键字是用于实现线程同步的重要机制,其主要通过 monitor 对象来确保代码块或方法的互斥执行。Monitor,也就是监视器,是基于Java虚拟机(JVM)实现的一种锁机制,它确保同一时刻只有一个...

    Java中synchronized实现原理详解

    Java中的`synchronized`关键字是实现线程同步的关键,它的实现原理涉及到多个方面,包括Java对象头、Monitor(监视器锁)以及一系列的锁优化策略。本文将深入探讨这些概念。 首先,`synchronized`用于保证多线程...

    实例解析Java中的synchronized关键字与线程平安问题_.docx

    锁住的只是对象本身,同一个类的不同对象调用这个方法并不会被锁住,而 synchronized(className.class) 实现了全局锁的功能,全部这个类的对象调用这个方法都受到锁的影响,此外()中还可以添加一个具体的对象,实现...

Global site tag (gtag.js) - Google Analytics