Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java 线程锁

作者:热血震荡   发布日期:2025-08-15   浏览:101

// Java 线程锁示例代码

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class ThreadLockExample {
    private final Lock lock = new ReentrantLock();  // 创建一个可重入锁

    public void performTask() {
        lock.lock();  // 获取锁
        try {
            // 模拟任务执行
            System.out.println(Thread.currentThread().getName() + " acquired the lock.");
            // 执行临界区代码
            for (int i = 0; i < 5; i++) {
                System.out.println(Thread.currentThread().getName() + " is working.");
                Thread.sleep(100);  // 模拟耗时操作
            }
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        } finally {
            lock.unlock();  // 释放锁
            System.out.println(Thread.currentThread().getName() + " released the lock.");
        }
    }

    public static void main(String[] args) {
        ThreadLockExample example = new ThreadLockExample();

        // 创建两个线程,它们将竞争同一个锁
        Thread thread1 = new Thread(() -> example.performTask(), "Thread-1");
        Thread thread2 = new Thread(() -> example.performTask(), "Thread-2");

        thread1.start();
        thread2.start();
    }
}

解释说明:

  1. Lock 接口Lock 是 Java 提供的一个接口,用于更灵活地管理线程间的同步。相比 synchronized 关键字,Lock 提供了更多的功能和灵活性。

  2. ReentrantLock 类ReentrantLockLock 接口的一个实现,支持可重入锁(即同一个线程可以多次获取同一把锁)。它提供了比 synchronized 更加细粒度的控制。

  3. lock.lock() 和 lock.unlock():在进入临界区之前,线程必须通过 lock.lock() 获取锁;在离开临界区之后,必须通过 lock.unlock() 释放锁。确保在任何情况下(即使发生异常)都能正确释放锁,通常使用 try-finally 块来保证这一点。

  4. 线程竞争:在这个例子中,两个线程 Thread-1Thread-2 将尝试执行 performTask 方法。由于该方法中有锁的存在,同一时间只有一个线程能够执行临界区的代码,另一个线程必须等待锁被释放后才能继续执行。

上一篇:deque java

下一篇:java判断list中的重复数据

大家都在看

java连接数据库的代码

ubuntu 卸载java

java读取excel中的图片

java新建

java sort用法

java collections.sort

java file类的方法

java 判断

java时间数据类型

java实体类转json字符串

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站