使用锁解决线程安全问题(主要两种)
1.内存锁:synchronized
2.可重入锁:Lock(ReentrantLock)
1.1内置锁的基本用法
a)修饰静态方法
b)修饰普通方法
c)修饰代码块
1.2内置锁的特性
a)互斥性(排他性)
b)刷新内存(内存可见性)
c)可重入
常见面试题:
2.1可重入锁的基本用法
a)创建Lock
b)加锁Lock.lock();
c)释放锁 lock.unlock();
2.2Lock的类型
公平锁
非公平锁(默认):性能比公平锁高
2.3注意事项
1.unlock操作一定要放在finally里面,不放在里面可能会造成锁资源永久占用的问题
2.lock一定要放在try之前,或者是try的首行
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ThreadLock3 {
public static void main(String[] args) {
Lock lock = new ReentrantLock();
System.out.println("执行 lock 操作");
lock.lock();
try {
System.out.println("进入了 try 方法");
int i = 10 / 0; // 某一种极端的操作
} finally {
System.out.println("执行 unlock 操作");
lock.unlock();
}
}
}