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

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

4.加锁 this 创建多个类实例


最后一个示例最为特殊,我们使用 synchronized 加锁 this,让这 5 个线程调用各自创建对象的方法,具体示例如下:


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


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


微信图片_20220120201213.jpg


从上述结果可以看出,当使用 synchronized 加锁 this 时,如果线程调用的不是同一个对象,那么这些线程之间使用的锁都是自己独立的锁,这个结果就和 synchronized 加锁 class 的结果完全不同了。

相关文章
|
5月前
|
安全 Java
Synchronized和Lock的区别
Synchronized和Lock的区别
59 0
|
Java
synchronized和lock的区别
synchronized和lock的区别
79 0
|
5月前
|
安全 Java 程序员
synchronized关键字与ReentrantLock的区别和应用
synchronized关键字与ReentrantLock的区别和应用
33 0
|
Java
Lock 和 Synchronized的区别?
本章主要讲解了Lock 和 Synchronized的区别和知识点
46 0
|
Java
synchronized和Lock的区别
synchronized和Lock的区别
65 0
synchronized(this)、synchronized(class)和synchronized(Object)的区别
synchronized(this)、synchronized(class)和synchronized(Object)的区别
92 0
synchronized(this)、synchronized(class)和synchronized(Object)的区别
|
前端开发 Java Spring
方法上加上 synchronized 就可以了么
方法上加上 synchronized 就可以了么
|
Java
Synchronized 和 Lock 的区别和使用场景
并发编程中,锁是经常需要用到的,今天我们一起来看下Java中的锁机制:synchronized和lock。
655 0
|
安全 Java
Lock和Synchronized的区别
Lock和Synchronized的区别
Lock和Synchronized的区别
|
安全 Java Spring
Synchronized代码详解?
Synchronized代码详解?