Lock 锁是 Java 中的一种锁对象,它可以控制多个线程对共享资源的访问。与 synchronized 关键字不同,Lock 锁可以在代码中显式地进行加锁和解锁,更加灵活。

Lock 锁有以下几个常用的方法:

  1. lock():获取锁对象,若锁已被其他线程占用,则当前线程会被阻塞直到锁可用。

  2. tryLock():尝试获取锁对象,如果锁可用则获取锁并返回 true,否则立即返回 false。

  3. unlock():释放锁对象。

  4. 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释放锁
Java Lock 锁详解:用法、示例和与 synchronized 的区别

原文地址: https://www.cveoy.top/t/topic/oFJT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录