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

使用同步锁的代码示例1

时间:2024-09-03 12:52:25浏览次数:9  
标签:同步 Thread 示例 lock 代码 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,代码,System,static,threads,new
From: https://blog.csdn.net/2401_86609655/article/details/141828331

相关文章

  • 使用同步锁的代码示例26
    使用同步锁的代码示例packageorg.zyf.javabasic.thread.lock.opti;importjava.util.concurrent.locks.ReentrantLock;/***@program:zyfboot-javabasic*@description:使用了ReentrantLock来保护对共享资源(counter)的访问,确保同一时间只有一个线程可以对计数器......
  • 使用同步锁的代码示例30
    使用同步锁的代码示例packageorg.zyf.javabasic.thread.lock.opti;importjava.util.concurrent.locks.ReentrantLock;/***@program:zyfboot-javabasic*@description:使用了ReentrantLock来保护对共享资源(counter)的访问,确保同一时间只有一个线程可以对计数器......
  • 代码随想录day49 || 42、接雨水 84、柱状图中最大的矩形
    42、接雨水functrap(height[]int)int{ //双指针思路,按照列计算雨水高度,分别计算每一列左右高于当前高度的最高柱子高度,然后通过min(left,right)-height[i]得出当前列的雨水体积 varresint varleft,rightint fori:=1;i<len(height)-1;i++{ left,right=......
  • NumPyro入门API和开发人员参考 pyro分布推理效果处理程序贡献代码更改日志入门教程使
    NumPyro文档¶NumPyro入门API和开发人员参考烟火元素分布推理效果处理程序贡献代码更改日志入门教程使用NumPyro的贝叶斯回归贝叶斯分层线性回归例如:棒球击球率示例:变型自动编码器例子:尼尔的漏斗例子:随机波动例如:亚麻和俳句可变推断参数化NumPyro模型的自动绘制不良后几何及......
  • 咸鱼代写代码的都是什么人?真的能有收入么?
    大家好,我是程序员鱼皮。看到一个帖子,是一位博主分享自己读研期间在咸鱼上靠帮别人代写代码接单的经历。由于内容过于真实,看完之后竟让我有些红温了。我估计也有很多学编程的同学想自己接单帮别人代写代码,那代写代码真的能有收入么?是亏麻了还是赚麻了?下面我先给大家简单分享一下......
  • 【路径规划】在二维环境中快速探索随机树和路径规划的示例
    摘要本文介绍了快速探索随机树(Rapidly-exploringRandomTree,RRT)算法在二维环境中的路径规划应用。RRT是一种随机采样算法,能够快速构建从起点到目标点的路径,特别适用于复杂环境中的机器人路径规划。通过在随机方向上扩展树结构,RRT算法能够高效避开障碍物并找到一条可行路径......
  • idea 设置代码样式
    设置类注释模板类注释:File-->Settings-->Editor-->FileandCodeTemplates将如下代码拷贝到上图右侧空白区域即可(这个更为详细,具体用哪个自己决定)/****@description*@author${USER}*@date${DATE}*@version1.0*@[email protected]......
  • 海马算法(SHO)优化支持向量机原理及Matlab代码
    目录0引言1数学模型2优化方式3Maltab代码3.1伪代码3.2SHO主函数代码3.3SHO-SVM4视频讲解0引言海马算法(SeaHorseOptimizer,SHO)是ShijieZhao于2023年基于自然界中海马的运动、捕食和繁殖行为提出的群体智能算法。SHO算法两个阶段,SHO分别模拟了海马的不同运......
  • 非洲秃鹫算法(AVOV)优化BP神经网络原理及Matlab代码
    目录0引言1 数学模型2优化方式3Matlab代码3.1伪代码3.2AVOA主函数代码3.3AVOA-BP4视频讲解0引言非洲秃鹫算法(Africanvulturesoptimizationalgorithm,AVOA)是BenyaminAbdollahzadeh等人于2021年提出的群智能算法,该算法通过模拟非洲秃鹫典型的领导者-追随......
  • 非洲秃鹫算法(AVOA)优化支持向量机原理及Matlab代码
    目录0引言1 数学模型2优化方式3Matlab代码3.1伪代码3.2AVOA主函数代码3.3AVOA-SVM4视频讲解0引言非洲秃鹫算法(Africanvulturesoptimizationalgorithm,AVOA)是BenyaminAbdollahzadeh等人于2021年提出的群智能算法,该算法通过模拟非洲秃鹫典型的领导者-追随......