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锁

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

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