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

java中的锁

作者:菠蘿。d海   发布日期:2025-10-14   浏览:31

// Java中的锁示例

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

public class LockExample {
    private final Lock lock = new ReentrantLock();  // 创建一个ReentrantLock对象
    private int count = 0;

    public void increment() {
        lock.lock();  // 获取锁
        try {
            count++;
        } finally {
            lock.unlock();  // 确保在任何情况下都会释放锁
        }
    }

    public int getCount() {
        lock.lock();
        try {
            return count;
        } finally {
            lock.unlock();
        }
    }

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

        // 模拟多线程环境
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                example.increment();
            }
        });

        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                example.increment();
            }
        });

        t1.start();
        t2.start();

        try {
            t1.join();
            t2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Final count: " + example.getCount());
    }
}

解释说明:

  1. ReentrantLockReentrantLock 是 Java 提供的一种显式锁机制,它提供了比内置同步更灵活的锁定方式。它可以尝试获取锁、查询锁的状态等。

  2. lock.lock() 和 lock.unlock():在需要同步的代码块前后分别调用 lock.lock()lock.unlock() 来确保同一时间只有一个线程可以执行这段代码。

  3. finally 块:无论是否发生异常,finally 块中的代码都会被执行,确保锁总是会被正确释放,避免死锁。

  4. 多线程模拟:通过创建两个线程来模拟并发环境,每个线程都会调用 increment() 方法多次,最终输出结果应该是 2000(1000 + 1000)。

上一篇:java 线程锁

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

大家都在看

java连接数据库的代码

java djl

ubuntu 卸载java

java读取excel中的图片

java新建

java sort用法

java collections.sort

java file类的方法

java发送qq邮件

java 判断

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

Laravel 中文站