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

java锁

作者:一小我的小情歌   发布日期:2026-07-16   浏览:28

// 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()); // 应该输出2000
    }
}

解释说明:

  1. Lock接口Lock接口提供了比内置同步(synchronized)更灵活的锁定机制。ReentrantLockLock接口的一个实现,支持重入锁。
  2. lock()和unlock()方法lock()用于获取锁,unlock()用于释放锁。确保在finally块中调用unlock(),以防止死锁。
  3. ReentrantLock:允许多个线程在同一时间持有相同的锁多次(即重入),并且只有持有锁的线程可以释放它。
  4. 线程安全的计数器:通过使用锁,确保多个线程对共享资源(如count变量)的访问是线程安全的。

这段代码展示了如何使用ReentrantLock来保护共享资源,避免竞态条件,并确保线程安全。

上一篇:java函数式编程

下一篇:java bigdecimal保留两位小数

大家都在看

java url decode

java判断是windows还是linux

java原始数据类型

java连接数据库的代码

java date类型比较大小

java djl

ubuntu 卸载java

es java api

java常用的设计模式有哪些

java list 查找

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

Laravel 中文站