java 讲解一下Lock锁
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/hcOH 著作权归作者所有。请勿转载和采集!