// Java多线程锁示例
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class MultiThreadLockExample {
private final Lock lock = new ReentrantLock();
private int count = 0;
public void increment() {
// 加锁,确保同一时间只有一个线程可以执行以下代码块
lock.lock();
try {
count++;
} finally {
// 确保在任何情况下都能释放锁
lock.unlock();
}
}
public int getCount() {
return count;
}
public static void main(String[] args) throws InterruptedException {
MultiThreadLockExample example = new MultiThreadLockExample();
// 创建多个线程来模拟并发访问
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();
// 等待所有线程完成
t1.join();
t2.join();
// 输出最终的结果
System.out.println("Final count: " + example.getCount());
}
}
Lock接口和ReentrantLock实现:
Lock 是一个接口,提供了比内置同步更灵活的锁定机制。ReentrantLock 是 Lock 接口的一个实现,支持重入锁(即同一个线程可以多次获取同一个锁)。加锁与解锁:
lock.lock() 方法来获取锁。lock.unlock() 方法来释放锁。unlock() 放在 finally 块中。并发访问控制:
increment 方法中,通过加锁确保同一时间只有一个线程可以执行计数器的递增操作,避免了竞态条件(race condition)。线程创建与启动:
t1 和 t2,每个线程都会调用 increment 方法 1000 次。join() 方法等待所有线程完成执行。结果输出:
上一篇:java实体转json
下一篇:java获取服务器ip
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站