首页 > 其他分享 >使用同步锁的代码示例30

使用同步锁的代码示例30

时间:2024-09-03 12:51:36浏览次数:12  
标签:同步 Thread 示例 lock 30 System static threads new

使用同步锁的代码示例

package org.zyf.javabasic.thread.lock.opti;
 
import java.util.concurrent.locks.ReentrantLock;
 
/**
 * @program: zyfboot-javabasic
 * @description: 使用了ReentrantLock来保护对共享资源(counter)的访问,确保同一时间只有一个线程可以对计数器进行操作。
 * @author: zhangyanfeng
 * @create: 2024-06-05 22:54
 **/
public class SyncLockExample {
    private static int counter = 0;
    private static final ReentrantLock lock = new ReentrantLock();
 
    public static void main(String[] args) throws InterruptedException {
        long startTime = System.currentTimeMillis();
        Thread[] threads = new Thread[100];
 
        for (int i = 0; i < 100; i++) {
            threads[i] = new Thread(new IncrementWithLock());
            threads[i].start();
        }
 
        for (Thread thread : threads) {
            thread.join();
        }
 
        long endTime = System.currentTimeMillis();
        System.out.println("Time with lock: " + (endTime - startTime) + " ms");
    }
 
    static class IncrementWithLock implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i < 1000000; i++) {
                lock.lock();
                try {
                    counter++;
                } finally {
                    lock.unlock();
                }
            }
        }
    }
}

不使用同步锁的代码示例

package org.zyf.javabasic.thread.lock.opti;
 
/**
 * @program: zyfboot-javabasic
 * @description: 不使用任何同步机制,直接操作共享资源。
 * @author: zhangyanfeng
 * @create: 2024-06-05 22:55
 **/
public class NoSyncLockExample {
    private static int counter = 0;
 
    public static void main(String[] args) throws InterruptedException {
        long startTime = System.currentTimeMillis();
        Thread[] threads = new Thread[100];
 
        for (int i = 0; i < 100; i++) {
            threads[i] = new Thread(new IncrementWithoutLock());
            threads[i].start();
        }
 
        for (Thread thread : threads) {
            thread.join();
        }
 
        long endTime = System.currentTimeMillis();
        System.out.println("Time without lock: " + (endTime - startTime) + " ms");
    }
 
    static class IncrementWithoutLock implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i < 1000000; i++) {
                counter++;
            }
        }
    }
}

结果与讨论

运行以上代码,我当前的机器上可以直观的看到

使用同步锁的时间: 1314 ms
不使用同步锁的时间: 20 ms
从结果中可以明显看出,同步锁会带来显著的性能开销。同步锁的存在增加了线程间的等待时间和上下文切换的开销,从而降低了程序的整体运行效率。所以在使用锁时,对锁的优化使用是必不可少的。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/xiaofeng10330111/article/details/139611703

标签:同步,Thread,示例,lock,30,System,static,threads,new
From: https://blog.csdn.net/2401_86609655/article/details/141858658

相关文章

  • 【路径规划】在二维环境中快速探索随机树和路径规划的示例
    摘要本文介绍了快速探索随机树(Rapidly-exploringRandomTree,RRT)算法在二维环境中的路径规划应用。RRT是一种随机采样算法,能够快速构建从起点到目标点的路径,特别适用于复杂环境中的机器人路径规划。通过在随机方向上扩展树结构,RRT算法能够高效避开障碍物并找到一条可行路径......
  • P7技术专家30k前端架构-商用级产品架构,业务实现+开发提效双线并进
    P7技术专家30k前端架构-商用级产品架构,业务实现+开发提效双线并进最近部门招聘,很多工程师,包括我在内都参与了内推和面试的过程,经过这次招聘,我发现能够最终拿到offer的人,基本上在看到简历的那一瞬间就已经定下来了,后续的面试只不过是一种验证而已(注意,是验证,而不是走过场),除非你......
  • 30s到0.8s,记录一次接口优化成功案例!
    大家好,我是沐子,推荐一个程序员免费学习的编程网站我爱编程网(www.love-coding.com)**场景**在高并发的数据处理场景中,接口响应时间的优化显得尤为重要。本文将分享一个真实案例,其中一个数据量达到200万+的接口的响应时间从30秒降低到了0.8秒内。这个案例不仅展示了问题诊......
  • 在Java中23种设计模式,分类以及代码示例
    在Java中23种设计模式,分类以及代码示例在Java中,设计模式可以分为23种,以三个不同的分类进行划分。1.创建型模式(CreationalPatterns):单例模式(Singleton)原型模式(Prototype)工厂方法模式(FactoryMethod)抽象工厂模式(AbstractFactory)建造者模式(Builder)2.结构型模式(Structura......
  • 惠海H6900B 12V升压24V 60V 5V升压12V芯片 DC-DC LED恒流驱动IC 300W大功率
    H6900B是一款高效率、稳定可靠的升压型LED恒流驱动芯片,适用于多个高亮度LED灯串的恒流驱动。以下是关于该产品的详细解析:产品特征:内置耐压60V功率NMOS,可直接处理60V电压,无需额外升压电路。输入电压范围2.7V-48V,兼容多种电源类型。效率高达95%以上,降低能耗,延长电池寿命。工作频率1MH......
  • 告别数据孤岛:数据增量同步方案助力企业数据整合!
    为了更高效、更经济地管理和传输数据,特别是在数据量大、更新频繁的环境中,企业需要通过数据增量同步方案来解决。数据增量同步方案是一种数据同步技术,只同步自上次同步以来发生变化的部分数据,而不是同步整个数据集。具有以下作用:1.减少数据传输量:在文件同步过程中,如果只同步发生......
  • 基于SpringBoot的宠物摄影网站管理系统+LW参考示例
    免费分享全阶段全种类学习资源,内涵少儿、小学、初中、高中、大学、专升本、考研、四六级、建造师、法考、网赚技巧、毕业设计等,持续更新,敬请关注~**文章目录1.项目介绍2.项目部署3.项目部分截图4.获取方式1.项目介绍技术栈+工具:SpringBoot+MySQL+Maven+IDEA......
  • 基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例
    免费分享全阶段全种类学习资源,内涵少儿、小学、初中、高中、大学、专升本、考研、四六级、建造师、法考、网赚技巧、毕业设计等,持续更新,敬请关注~文章目录1.项目介绍2.项目部署2.1后端2.2小程序端3.项目部分截图4.获取方式1.项目介绍技术栈+工具:SSM+JSP+......
  • Vue2 - 最新实现百度地图3D立体感视角教程及示例代码,利用WebGL实现3d百度地图详细流程
    前言如果您需要Vue3版本,请访问在vue2|nuxt2项目开发中,详解实现“安装引入百度地图webgl技术,实现3d地图教程”将百度地图变成3D视角效果,让百度地图平面2D视图和3D立体视图进行切换渲染显示,vue如何实现百度地图的三维立体地图效果,解决WebGL引入报错或无效、3D地图......
  • 科普文:软件架构Elasticsearch系列之【2024年8月30日 Shay:Elasticsearch is Open Sourc
     2021年1月,当时Elastic公司决定把Elasticsearch和Kibana的许可证从Apache2.0变更为ElasticLicense2.0(ELv2)和ServerSidePublicLicense(SSPL)双许可。尽管这两个许可证也允许源代码公开,但它们并不符合开源倡议组织(OSI)的开源定义。应对质疑:“本就是一个错误,现......