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(类锁)的区别 Synchronized 和 Static Synchronized 是 Java 中两种同步机制,它们都用于解决多线程并发访问的安全问题。然而,它们之间存在着本质的区别。...
在Java编程语言中,`synchronized`...理解类锁、对象锁和方法锁的用法,以及它们之间的关系,对于编写高效、安全的多线程Java程序至关重要。通过SynchronizedDemo这个示例代码,我们可以进一步学习和实践这些概念。
《深入剖析synchronized锁原理——从Java对象头的角度》 synchronized关键字在Java中扮演着重要的角色,它是Java实现同步的基础,确保了多线程环境下的数据一致性。不同于基于JDK实现的Lock接口(如ReentrantLock)...
`synchronized`关键字的工作原理基于Java内存模型(JMM)中的锁机制。当一个线程进入同步代码块后,会获取到监视器对象的锁,其他试图进入的线程会被阻塞,直到持有锁的线程退出同步代码块并释放锁。 **3. volatile...
Java中的`synchronized`关键字是多线程编程中的一个重要概念,用于控制并发访问共享资源,以保证数据的一致性和完整性。这个关键词提供了互斥锁机制,防止多个线程同时执行同一段代码,确保了线程安全。 一、`...
压缩包中的`Long.java`文件可能包含了一个具体的示例,演示了如何使用`synchronized`关键字来控制对`Long`对象的访问。通常,这个例子会创建一个`Long`实例,并在多线程环境中使用`synchronized`关键字保护对这个...
Java中的`synchronized`关键字是用于实现线程同步的关键机制,它的主要目的是确保在多线程环境中,对共享资源的访问能够保持数据的一致性和完整性。本文将深入探讨`synchronized`的两种主要用法:synchronized方法和...
首先,我们需要了解Java中的锁对象。Java提供了多种类型的锁,其中最基础的是`synchronized`关键字,它可以确保同一时间只有一个线程访问特定的代码块或方法。另外,`java.util.concurrent.locks`包提供了更强大的锁...
总的来说,`synchronized`是Java中实现线程安全的关键工具,它通过锁机制保证了对共享资源的有序访问,防止了数据竞争问题。然而,正确使用`synchronized`需要对并发编程有深入理解,以确保性能和正确性之间的平衡。...
"基于Java synchronized同步锁实现线程交互" Java多线程能够提高CPU利用...因此,在使用Java多线程的场景中,请充分理解Java线程各状态之间的关系及其切换,并使用synchronized、wait()和notify()方法实现线程交互。
Java中的`synchronized`关键字是实现线程安全的关键机制,它基于Java对象头的Mark Word进行锁的状态管理。Mark Word是一个动态变化的数据结构,用于存储对象的HashCode、分代年龄、锁状态标志等信息。在32位JVM中,...
`synchronized`关键字在Java中提供了互斥访问,也就是说,当一个线程进入一个对象的`synchronized`代码块或方法时,其他线程对这个对象的`synchronized`代码块或方法的访问将会被阻塞,直到当前线程执行完毕并释放锁...
1. **对象锁**:每个Java对象都可以作为一个锁,当调用对象的`synchronized`方法或在代码块中使用`synchronized`关键字时,会获取到这个对象的锁。如果多个线程尝试访问同一个对象的同步代码,只有一个线程能够获得...
在Java编程语言中,`...总结,`java synchronized demo`是一个关于如何在Java中使用`synchronized`关键字进行线程同步的示例,通过理解和实践这个例子,开发者可以更好地掌握多线程环境下数据安全和同步的重要性。
总的来说,synchronized是Java中保证线程安全的重要工具,它通过锁机制实现了对共享资源的访问控制,但过度使用或不当使用可能会导致性能下降。理解其工作原理和优化策略,有助于编写高效、线程安全的Java代码。
Java中的`synchronized`关键字是多线程编程中的一个重要概念,用于控制并发访问共享资源,以保证数据的一致性和完整性。本文将深入解析`synchronized`在Java中的应用和工作原理。 一、`synchronized`的基本用法 `...
Java中的`synchronized`关键字是用于实现线程同步的重要机制,其主要通过 monitor 对象来确保代码块或方法的互斥执行。Monitor,也就是监视器,是基于Java虚拟机(JVM)实现的一种锁机制,它确保同一时刻只有一个...
Java中的`synchronized`关键字是实现线程同步的关键,它的实现原理涉及到多个方面,包括Java对象头、Monitor(监视器锁)以及一系列的锁优化策略。本文将深入探讨这些概念。 首先,`synchronized`用于保证多线程...
锁住的只是对象本身,同一个类的不同对象调用这个方法并不会被锁住,而 synchronized(className.class) 实现了全局锁的功能,全部这个类的对象调用这个方法都受到锁的影响,此外()中还可以添加一个具体的对象,实现...