2、synchronized同步锁

1、简介

在Java多线程中,咱们要实现同步串行最先接触的就是synchronized关键字。多线程

基本语法以下:this

synchronized(锁) {
    // 代码块
}

sychronized关键字的锁主要有三种使用:spa

1)对象锁线程

2)类锁code

3)字符串锁对象

2、示例

1、对象锁

最多见的写法,synchronized写在了成员方法上,这表示它以this为锁,锁的是当前对象blog

public synchronized void execute() {
        // 代码
}

或者你也能够换一种写法,下降锁粒度内存

public void execute() {
        synchronized (this) {
            // 代码块
        }
    }

2、类锁

静态方法加锁,那么锁的是类字符串

public static synchronized void execute() {
        // 代码块
    }

你也能够把类看成锁同步

public void execute() {
        synchronized (SynchronizedDemo.class) {
            // 代码块
        }
    }

3、字符串

除了对象锁,类锁,Java还支持以一个字符串做为锁。

这里注意,一般咱们会和String的intern()方法一块儿用。intern()方法会将相同的值引用指向常量池的同一个内存块,因此能够保证字符串值相同即锁相同(即便值是由引用拼接的)。

private String id = "1";

    public void execute() {
        synchronized (id) {
            // 代码块
        }
    }
相关文章
相关标签/搜索