synchronized
同步代码块synchronized(同步监视器){
//需要被同步的代码
}
同步方法
- 需要被同步的代码:操作共享数据的代码。
- 共享数据:多个线程共同操作的变量。
- 同步监视器:俗称“锁”,任何一个对象都可以充当锁。(要求多个线程必须共用同一把锁)
public static synchronized void test(){
//非静态时同步监视器:this
//静态时同步监视器:当前类
}
好处
操作线程时,只能有一个线程参与,其他线程等待,相当于一个单线程的过程,解决了线程的安全问题。
坏处速度变慢。
解决懒汉式线程安全问题package com.threadT;
import jdk.internal.org.objectweb.asm.tree.LineNumberNode;
public class SingleTest {
}
class Bank {
private Bank() {
}
private static Bank instance = null;
//方式一
//方式二
//优化
public static Bank getInstance() {
if (instance == null) {
synchronized (Bank.class) {
if (instance == null) {
instance = new Bank();
}
return instance;
}
}
return instance;
}
}



