二、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) { // 代码块 } }