通过CountDownLatch模拟高并发下测试各种单例模式的执行结果

java利用CountDownLatch实现并行计算 主要介绍了java利用CountDownLatch实现并行计算,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 立即下载

      单例模式一般写法有多种,那么哪种相对来说效果比较好。下面一起看看我的测试结果吧。

      我是通过CountDownLatch来模拟刚并发下,各种单例模式的执行结果。自己做加深影响所写,所以写的比较粗糙,希望大家不要介意。

先上代码吧,后面做结果说明

1、最基础的单例

package singleton;

/**
 * 最简单的单例
 */
public class MySingleton {

    private static   MySingleton mySingleton = null;

    public static MySingleton getInstance(){
        if(mySingleton == null){
            System.out.println(System.currentTimeMillis());
             mySingleton = new MySingleton();
        }
        return mySingleton;
    }
}

2、带锁的单例

package singleton;

/**
 * 最简单的单例
 */
public class MySingleton2 {

    private static MySingleton2 mySingleton = null;

    private static Object obj = new Object();

    public static MySingleton2 getInstance(){
        if(mySingleton == null){
            System.out.println(System.currentTimeMillis());
            synchronized (obj){
                if(mySingleton == null){
                    mySingleton = new MySingleton2();
                }
            }

        }
        return mySingleton;
    }
}

3、测试最简单的单例类

  

package singleton;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 测试类
 */
public class Test {
    /**
     * 模拟client_num个客户端同时访问
     */
    private static int clientNum = 1000;
    private static int threadsNum = 10;
    /**
     * 计数器
     */
    final static CountDownLatch doneSignal = new CountDownLatch(clientNum);
    public static void main(String[] args) {
        /**
         * 建立线程池
         */
        ExecutorService exec = Executors.newFixedThreadPool(threadsNum);
        for(int i=0 ; i< clientNum; i++){
             MyRunnable myRunnable = new MyRunnable();
             exec.execute(myRunnable);
             doneSignal.countDown();
         }
    }

     static class  MyRunnable implements  Runnable{
        @Override
        public void run() {
            try{
                doneSignal.await();
            }catch (Exception e){
                e.printStackTrace();
            }
            System.out.println(MySingleton.getInstance()+"=");
        }
    }

}

测试结果:


4、上锁的单例测试类

package singleton;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 测试类
 */
public class Test {
    /**
     * 模拟client_num个客户端同时访问
     */
    private static int clientNum = 100;
    private static int threadsNum = 5;
    /**
     * 计数器
     */
    final static CountDownLatch doneSignal = new CountDownLatch(clientNum);
    public static void main(String[] args) {
        /**
         * 建立线程池
         */
        ExecutorService exec = Executors.newFixedThreadPool(threadsNum);
        for(int i=0 ; i< clientNum; i++){
             MyRunnable myRunnable = new MyRunnable();
             exec.execute(myRunnable);
             doneSignal.countDown();
         }
    }

     static class  MyRunnable implements  Runnable{
        @Override
        public void run() {
            try{
                doneSignal.await();
            }catch (Exception e){
                e.printStackTrace();
            }
            System.out.println(MySingleton2.getInstance()+"=");
        }
    }

}

测试结果:




java线程并发countdownlatch类使用示例 javar的CountDownLatch是个计数器,它有一个初始数,等待这个计数器的线程必须等到计数器倒数到零时才可继续。 立即下载

相关推荐

华为海思IC前端中后端(COT&XPU)岗位笔试机考题

华为海思COT和XPU部门IC前端,IC中端,IC后端岗位笔试真题分享

weixin_37584728的博客 3362

并发编程(1)—利用 CountDownLatch 模拟一个【并发场景】

让 100 个线程在这里等待指令。当 100 个线程都准备好了之后就开始竞争操作。这样模拟出的场景非常接近业务中高并发,平常测试时可以用用,不过更多的还是借助老朋友 JMeter 工具。CountDownLatch 是并发编程中提供的一个工具类,里面封装着一个线程倒数计数器。有点类似运动会上的发令枪。倒数到 0 就开始发令赛跑。将计数器减到 0 为止,阻塞的主线程就会被唤醒继续往下执行,从而获取到所有线程执行完之后的结果。如果不用这个阻塞,也可以使用。来阻塞主线程,不过时间要自己估算,非常不稳定。

龚小帅的博客 804

Python调用Google Trends官方数据接口实战指南

Google Trends作为全球最权威的搜索热度分析工具,其数据本质是公开、结构化、可编程访问的时序指标,而非需爬取的网页内容。其底层基于标准HTTP协议与JSON API交互,核心原理在于复现用户浏览器行为——通过/explore接口获取token,再凭token请求/widgetdata/multiline等端点获取归一化(0-100)时间序列数据。该技术路径规避了Selenium渲染依赖与非官方库的脆弱性,具备高稳定性、易调试、可监控等工程优势,广泛应用于竞品监测、内容选题验证、地域营销策略制定等业

weixin_29789925的博客 422

并发编程CountDownLatch浅析

并发编程CountDownLatch浅析

似霰的博客 1418

rk3568 android 11.0 userdata 改为ext4格式

功能:解决设备在恢复出厂设置进行擦除数据的时候卡住问题。 1.修改userdata分区为ext4格式 diff --git a/device/rockchip/common/scripts/fstab_tools/fstab.in b/device/rockchip/common/scripts/fstab_tools/fstab.in index 583e75579d..036336835d 100755 --- a/device/rockchip/common/scripts/fstab_tools/

chgh1306的专栏 2578

数字麦克风PDM信号采集与STM32 I2S接口应用(二)

在使用STM32的数字麦克风I2S接口时,计算采样率让人头疼,芯片手册上没有明确的说法,而手册上的计算方法经过测试却和实验不符。借助搜索引擎,大部分资料都是来自于开发板卖家或开发板论坛,主要是咪头采集然后配置WM89系列解码芯片,然后配合FatFS、MP3解码等模式,主要是讲解I2S录音、存储、放音等。外文资料得到的也寥寥无几,也没有找到讲解STM32数字麦克风配置、计算的文档。加上网上资料转载、抄袭、浅尝辄止的笔记教程,这些更是让检索大海捞针,过程艰辛一言难尽,有些网文三言两语抑或作者都没有搞清楚随手一写

XIAOYOUDUODUO的博客 6055

【并发编程学习篇】深入理解CountDownLatch

CountDownLatch(闭锁)是一个同步协助类,允许一个或多个线程等待,直到其他线程完成操作集。CountDownLatch使用给定的计数值(count)初始化。await方法会阻塞直到当前的计数值被countDown方法的调用达到0,count为0之后所有等待的线程都会被释放,并且随后对await方法的调用都会立即返回。这是一个一次性现象 —— count不会被重置。如果你需要一个重置count的版本,那么请考虑使用CyclicBarrier。

一个勤勤恳恳的程序猿 2万+

CVE-2021-3156本地提权漏洞复现

受影响版本 sudo: 1.8.2 - 1.8.31p2 sudo: 1.9.0 - 1.9.5p1 测试 我这里是在本地centos7上进行测试。 需要目标机器上存在python编译器、目标主机出网或者能上传文件到目标主机。 以非root用户登录系统,并运行如下命令: sudoedit -s / 通常响应一个以 sudoedit: / 开头的报错,多半存在漏洞。 利用 提权脚本: https://www.o2oxy.cn/wp-content/uploa

The current road is different, love needs to distinguish between right and wrong 3782

使用CountDownLatch模拟高并发场景

通过CountDownLatch的简单应用和实现原理这篇博客,可以简单的了解到CountDownLatch的作用。 由此引申出使用CountDownLatch模拟高并发场景的想法,作为一个并发编程的计数器,我们是不是可以设想创建1000个线程,等所有的线程都创建完成后,CountDownLatch初始值归0,1000个线程就会执行接下来的逻辑,并发访问接口 代码样例: public static...

硅脂味咖啡的博客 1396

2024 大型集团人力资源数字化转型业务蓝图规划及实施路径规划方案【附全文阅读】

摘要:本方案针对大型企业人力资源数字化转型需求,重点解决组织协同弱、薪酬绩效管控难等痛点。通过构建"6项能力+8大流程+4大系统"框架,分三阶段(2024-2026年)实施7大项目,包括e-HR系统更换、员工服务平台搭建等核心场景。方案优先推进基础系统改造(2024年),再完善绩效管理和数据分析(2025年),最后落地人才发展等进阶模块(2026年),实现与OA、ERP系统的数据集成,全面提升HR运营效率和员工体验。文末提供的优先级清单明确了10个数字化场景的实施顺序及预期价值。

cdfunlove的博客 1346

基于AOD-Net与GAN的深度学习去雾算法开发

本文提出一种结合AOD-Net与GAN的深度学习去雾算法。通过改进的AOD-GAN网络架构,集成风格迁移模块,设计包含对抗损失、内容损失和风格损失的复合目标函数。实验表明,该方法在PSNR(24.67)、SSIM(0.92)和FID(32.15)指标上优于传统方法,实现了端到端的物理模型引导图像去雾。未来将优化多尺度特征融合和轻量化部署。

huanghm88的专栏 594

java多线程之CountDownLatch(1)(模拟高并发和开会问题)

一、简介 CountDownLatch 是 java.util.concurrent 包下的一个同步辅助类,它能使一个或多个线程在其他的线程的一系列操作完成之前一直等待,初始化值为计数器大小(即线程数量)。 二、使用场景 同时启动多个线程; 多个线程操作完成之前一直等待。 注:此处“同时”只能是“大约同时”,涉及到每个线程是否可以分配到一个自由的处理器,系统是否繁忙,线程释放CPU的速度,...

攻城狮Luke 1257

LoRA 完整解析:从理论到实践

LoRA(低秩适应)是一种高效的大模型微调方法,通过添加少量可训练参数(低秩矩阵)来适配新任务,避免全参数微调的高成本。其核心是将权重更新ΔW分解为两个小矩阵B×A的乘积,大幅减少训练参数量(仅0.1-1%)。LoRA基于内在维度假设,通过低秩约束捕捉核心任务信息,兼具效率与效果。实际应用中,常用配置为秩r=16-32,目标模块选择注意力层的q_proj和v_proj,学习率比全参数微调大10倍(约1e-4)。优势包括参数高效(内存降低60-80%)、多任务适配灵活、保留预训练知识等,已成为大模型微调的主流

echo的博客 1413

Java 测试 25:并发测试(CountDownLatch 模拟多线程请求)

本文介绍了使用Java并发工具CountDownLatch进行高并发测试的方法。CountDownLatch是一个同步辅助类,允许一个或多个线程等待其他线程完成操作,非常适合模拟多线程并发场景。文章详细讲解了CountDownLatch的工作原理、核心方法及其在并发测试中的应用场景,包括同步线程启动、等待请求完成和流程控制。通过一个订单服务的RESTful API测试实例,演示了如何构建完整的并发测试框架,包括线程池配置、计数器使用、任务执行和结果验证。文中提供了详细的代码示例和关键依赖配置,帮助开发者掌握

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

java 利用countdownlatch模拟高并发情况

edison_is_on_Call java 正文 java 利用countdownlatch模拟高并发情况 原 edison_kwok edison_kwok 发布于 昨天 20:30 字数 331 阅读 7 收藏 1 点赞 0 评论 0 JavaCount_Down 一、简介 CountDownLatch 是 java.util.concurrent 包下的一个同步辅助类,它能使一个...

zhuguang10的博客 700

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java代码模拟高并发,多线程之CountDownLatch,Semaphore

标题通过c可以模拟高并发,多线程 需要测试的高并发或多线程的业务代码 package test; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; /** * 主业务类 * */ public class Common { private ...

jonesAriven的博客 562

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

模拟多线程高并发进行压力测试

https://www.jianshu.com/p/46444637dd68 思路 第一种:线程池模拟200个线程——wait等待线程数达200——notifyAll唤醒所有线程 第二种:线程池模拟200个线程——阻塞线程——达到200条件释放 比较 两种方案都可以实现瞬时高并发的模拟,但是建议使用第二种方案。 第一种方案中,压测过程中,wait状态下的线程已经释放对象上的锁定,唤醒时...

攻城专栏 4319

CountDownLatch——高并发场景的并发控制器

并发控制如同交响乐团的指挥,CountDownLatch就是那根精准的指挥棒” —— 来自一位凌晨三点debug的程序员 🎻💻。

dhrmt的博客 1135

CountDownLatch高并发场景示例

package com.hanshimeng.other; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.Atomic...

hanshimeng的博客 389

高并发模拟多个用户同时访问接口

前些天客户需要测试一下接口可以承受多大的并发量!!! 当时就想到了countDownLatch,就小小的提了一下意见就被安排到我的头上! 废话就不多说了(为了不浪费你们的时间,先说好这代码是测试单个接口或者方法的并发量的)。 先说思路,再上代码(整体代码在下边哟) 思路 先定义一个countDownLatch //发令枪 CountDownLatch countDownLatch = new CountDownLatch(10); countDownLatch 就是一个发令枪,比如

weixin_45729937的博客 7939

CAS自定义锁及模拟高并发测试

CAS自定义锁及模拟高并发测试 文章简介 本文主要介绍CAS实现自定义独占锁,及模拟高并发测试检测独占锁是否线程安全。本文更偏向于后者。 独占锁 CAS+BQ+LockSupport就可以完成,这里不是重点,重点是测试。 public class ExclusiveLock { AtomicReference<Thread> sign = new AtomicReference...

LiuRenyou的博客 635

Java如何模拟一百个线程同时执行(CountDownLatch,CyclicBarrier)

Java如何模拟一百个线程同时执行 对并发测试,在平常开发过程中并不容易在现。但是借助CountDownLatch和CyclicBarrier 可可以让线程同时等待同一个状态,在多核多线程的pc还是能大概的模拟出来,但是其实从真正意义上来说,并不是完全同时执行,cpu的资源是通过时间片轮转法进行调度。 上代码 CountDownLatch模拟多线程 @Test void testCountDownLatch(){ //等待100个线程同时执行 CountDo

qq_42271561的博客 4077

java如何统计多线程高并发下的总执行时间

办法是使用java.util.concurrent包下的计数器工具类CountDownLatch,看demo,本demo巧妙的使用了CountDownLatch让多线程模拟高并发以及所有线程执行完之后的耗时。 private static Date startDate; private static Date endDate; private static String start...

飞在江湖的专栏 7367

测试countDownLatch

package com.neusoft; import java.util.concurrent.CountDownLatch; /** * 让主线程等待所有其他线程执行完毕,再去执行,使用场景汇总子线程执行完的结果,统一处理。 * CountDownLatch 类似于join的阻塞 * @author Administrator */ ...

开心就好 6110

java 并发测试_Java高并发测试代码

1、并发程序/*** 高并发测试:* 创建threadNum个线程;* 执行任务task* @param threadNum 线程数量* @param task 任务*/public static void parallelTesk(int threadNum, Runnable task){// 1. 定义闭锁来拦截线程final CountDownLatch startGate = new C...

weixin_36301830的博客 1193
上一篇: dubbo负载均衡算法源码解析
下一篇: 多线程处理任务案例(同步锁+StopWatch+CountDownLatch)
yufei_java
博客等级 码龄10年 18粉丝 60原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值