当前位置: 首页 > news >正文

一个公司可以注册几个网站wordpress 获取友链

一个公司可以注册几个网站,wordpress 获取友链,网站建设费用怎么记账,吉林省住房城乡建设厅网站首页ReentrantLock 是 Java 中处理并发问题的强大工具,用于解决多线程下的竞态条件(如 count 操作导致的数据不一致)。本文旨在展示其最核心、最标准的用法。 1. 实战代码示例 以下代码通过对比加锁与否,直观展示 ReentrantLock 的作用…

ReentrantLock 是 Java 中处理并发问题的强大工具,用于解决多线程下的竞态条件(如 count++ 操作导致的数据不一致)。本文旨在展示其最核心、最标准的用法。

1. 实战代码示例

以下代码通过对比加锁与否,直观展示 ReentrantLock 的作用。

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;public class ReentrantLockDemo {// 1. 实例化一个 ReentrantLockprivate final ReentrantLock lock = new ReentrantLock();private int count = 0;/*** 不使用锁的递增方法(线程不安全)*/public void incrementWithoutLock() {count++;}/*** 使用 ReentrantLock 的递增方法(线程安全)*/public void incrementWithLock() {// 2. 获取锁lock.lock();try {// 3. 在 try 块中执行所有共享资源操作count++;} finally {// 4. 在 finally 块中释放锁,确保锁一定会被释放lock.unlock();}}public int getCount() {return count;}public void reset() {count = 0;}public static void main(String[] args) throws InterruptedException {final int threadCount = 100;final int incrementsPerThread = 1000;final int expectedCount = threadCount * incrementsPerThread;ExecutorService executor = Executors.newFixedThreadPool(threadCount);ReentrantLockDemo demo = new ReentrantLockDemo();// --- 场景一:不使用锁 ---System.out.println("--- 场景一:不使用锁 (线程不安全) ---");for (int i = 0; i < threadCount; i++) {for (int j = 0; j < incrementsPerThread; j++) {executor.submit(demo::incrementWithoutLock);}}executor.shutdown();executor.awaitTermination(5, TimeUnit.SECONDS);System.out.println("预期结果: " + expectedCount);System.out.println("实际结果: " + demo.getCount());System.out.println("-------------------------------------\n");// --- 场景二:使用 ReentrantLock ---System.out.println("--- 场景二:使用 ReentrantLock (线程安全) ---");demo.reset();executor = Executors.newFixedThreadPool(threadCount);for (int i = 0; i < threadCount; i++) {for (int j = 0; j < incrementsPerThread; j++) {executor.submit(demo::incrementWithLock);}}executor.shutdown();executor.awaitTermination(5, TimeUnit.SECONDS);System.out.println("预期结果: " + expectedCount);System.out.println("实际结果: " + demo.getCount());System.out.println("-------------------------------------");}
}

2. 运行结果

--- 场景一:不使用锁 (线程不安全) ---
预期结果: 100000
实际结果: 99654
---------------------------------------- 场景二:使用 ReentrantLock (线程安全) ---
预期结果: 100000
实际结果: 100000
-------------------------------------

结果清晰地表明,不使用锁导致了数据错误,而 ReentrantLock 保证了计算的正确性。

3. 核心使用范式

ReentrantLock 的使用必须遵循以下结构,以确保锁在任何情况下(包括异常)都能被释放,从而防止死锁。

lock.lock(); // 1. 获取锁
try {// 2. 执行需要保护的代码
} finally {lock.unlock(); // 3. 在 finally 块中释放锁
}

结论:synchronized 的自动锁管理不同,ReentrantLock 需要开发者手动保证锁的释放。严格遵守 try-finally 范式是正确使用 ReentrantLock 的关键。

http://www.dtcms.com/a/512867.html

相关文章:

  • 部署大模型的API实战教程!
  • 手机版网站优化html5移动网站开发实例
  • 解释Python中的鸭子类型(Duck Typing)和它与静态类型语言的区别?
  • 数字营销网站建设国外在线crm酒店系统
  • pdw这个conda环境缺少cartopy这个库,将所有依赖下载后使用pip install ./*.whl离线安装,结果报错numpy版本不兼容
  • 用自己的电脑做视频网站微信推广
  • 强化学习2.2 MDP实践——Frozen lake
  • LeetCode 668.乘法表中第k小的数
  • 专业网站建设市场分析自媒体平台哪个收益高
  • 建设通网站怎么样网站如何做响应
  • Java 中的自引用
  • Cursor AI 技术架构、核心模型与技术参数全解析
  • 记录一次线上oom问题排查
  • 深度解析:通过ADO.NET驱动Kdbndp高效连接与操作Kingbase数据库
  • 网站排名怎么上去网站建设捌金手指花总二五
  • 上海做电子商务网站的公司快猫
  • Pycharm远程连接服务器项目
  • linux系统--LVM扩容如何把新的物理卷添加到LVM中 详细教程 超简单
  • 泉州丰泽建设局网站北京做app的公司有哪些
  • 4.8.定义模式
  • Linux命令过关挑战
  • 国内域名购买网站山西省住房和城乡建设厅网站
  • SH-PEG-Silane|巯基-聚乙二醇-硅烷|表面修饰应用
  • 科技园区建设网站的意义做实体识别的网站
  • 网站的不同类石家庄手机网站建设公司
  • Pycharm中使用自带的数据库可视化工具
  • 东莞高端网站建设费用c2c商城网站建设二次开发
  • 做兼职翻译的网站专业网站定制公司
  • 【ROS2】行为树 BehaviorTree(九):自定义ROS2-行为树节点
  • 考研408《计算机组成原理》复习笔记,第七章(2)——I/O方式