synchronized 加锁 this 和 class 的区别!(2)

简介: synchronized 加锁 this 和 class 的区别!(2)

1.加锁 class 共享一个类实例


首先,我们创建 5 个线程,调用同一个对象下 synchronized 加锁的 class 代码,具体示例如下:


import java.util.Date;
import java.util.concurrent.TimeUnit;
publicclass SynchronizedExample {
    public static void main(String[] args) {
        // 创建当前类实例
        final SynchronizedExample example = new SynchronizedExample();
        // 创建 5 个线程执行任务
        for (int i = 0; i < 5; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        // 调用 synchronized 修饰的 class 方法
                        example.classMethod();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    }
    /**
     * synchronized 修饰的 class 方法
     * @throws InterruptedException
     */
    public void classMethod() throws InterruptedException {
        synchronized (SynchronizedExample.class) {
            System.out.println(String.format("当前执行线程:%s,执行时间:%s",
                    Thread.currentThread().getName(), new Date()));
            TimeUnit.SECONDS.sleep(1);
        }
    }
}


以上程序的执行结果如下:


微信图片_20220120200903.jpg


从上述结果可以看出,这 5 个线程共享的是同一把锁。

相关文章
|
7月前
|
安全 Java
Synchronized和Lock的区别
Synchronized和Lock的区别
72 0
|
4月前
|
存储 Java 程序员
synchronized的原理以及与ReentrantLock的区别
`synchronized`和`ReentrantLock`均为Java线程同步机制,确保共享资源的单一时刻独占访问。`synchronized`关键字直接嵌入JVM,可通过修饰方法或代码块实现对象锁或监视器锁,具备可重入性,依赖Mark Word进行锁状态管理。`ReentrantLock`则需显式调用`lock()`和`unlock()`,提供更灵活控制,如公平锁、尝试锁及条件变量。两者在语法、灵活性和异常处理上有所差异,但均支持可重入性。性能方面,随JDK优化,`synchronized`在某些场景下甚至优于`ReentrantLock`。选择使用哪个取决于具体需求和上下文。
|
Java
synchronized和lock的区别
synchronized和lock的区别
89 0
|
7月前
synchronized与ReentrantLock区别与联系
synchronized与ReentrantLock区别与联系
43 0
|
Java
Lock 和 Synchronized的区别?
本章主要讲解了Lock 和 Synchronized的区别和知识点
55 0
synchronized(this)、synchronized(class)和synchronized(Object)的区别
synchronized(this)、synchronized(class)和synchronized(Object)的区别
143 0
synchronized(this)、synchronized(class)和synchronized(Object)的区别
|
Java
synchronized和Lock的区别
synchronized和Lock的区别
76 0
|
前端开发 Java Spring
方法上加上 synchronized 就可以了么
方法上加上 synchronized 就可以了么
|
安全 Java
Lock和Synchronized的区别
Lock和Synchronized的区别
Lock和Synchronized的区别
|
Java
JAVA同步锁 synchronized(this)、synchronized(class)与synchronized(Object)的区别
利用实例介绍JAVA同步锁 synchronized(this)、synchronized(class)与synchronized(Object)的区别
149 0
JAVA同步锁 synchronized(this)、synchronized(class)与synchronized(Object)的区别