二、synchronized同步锁

一、简介

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

基本语法如下:

synchronized(锁) {
    // 代码块
}

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

1)对象锁

2)类锁

3)字符串锁

二、示例

一、对象锁

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

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

或者你也可以换一种写法,降低锁粒度

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

二、类锁

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

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

你也可以把类当作锁

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

三、字符串

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

这里注意,通常我们会和String的intern()方法一起用。intern()方法会将相同的值引用指向常量池的同一个内存块,所以可以保证字符串值相同即锁相同(即使值是由引用拼接的)。

private String id = "1";

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

 

posted @ 2018-12-23 19:03  __lay  阅读(1048)  评论(0编辑  收藏  举报