Java Lock 锁详解:用法、示例和与 synchronized 的区别
Lock 锁是 Java 中的一种锁对象,它可以控制多个线程对共享资源的访问。与 synchronized 关键字不同,Lock 锁可以在代码中显式地进行加锁和解锁,更加灵活。
Lock 锁有以下几个常用的方法:
-
lock():获取锁对象,若锁已被其他线程占用,则当前线程会被阻塞直到锁可用。
-
tryLock():尝试获取锁对象,如果锁可用则获取锁并返回 true,否则立即返回 false。
-
unlock():释放锁对象。
-
newCondition():创建一个与当前锁关联的条件对象,用于线程之间的通信。
使用 Lock 锁的代码示例:
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockDemo {
private static Lock lock = new ReentrantLock(); // 创建一个可重入锁对象
public static void main(String[] args) {
new Thread(() -> {
lock.lock(); // 加锁
try {
System.out.println(Thread.currentThread().getName() + '获取到锁');
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock(); // 解锁
System.out.println(Thread.currentThread().getName() + '释放锁');
}
}, 'Thread-1').start();
new Thread(() -> {
if (lock.tryLock()) { // 尝试获取锁
try {
System.out.println(Thread.currentThread().getName() + '获取到锁');
} finally {
lock.unlock(); // 解锁
System.out.println(Thread.currentThread().getName() + '释放锁');
}
} else {
System.out.println(Thread.currentThread().getName() + '未获取到锁');
}
}, 'Thread-2').start();
}
}
运行结果:
Thread-1获取到锁
Thread-2未获取到锁
Thread-1释放锁
原文地址: https://www.cveoy.top/t/topic/oFJT 著作权归作者所有。请勿转载和采集!