模拟高并发请求_模拟驾驶怎么点火

模拟高并发请求_模拟驾驶怎么点火转:模拟高并发的情况

大家好,又见面了,我是你们的朋友全栈君。

模拟高并发的情况

在多线程编程里,CountDownLatch是一个很好的计数器工具。

它所在的包:

package java.util.concurrent

常用的两个方法:

1、计数器减一

   public void countDown() {

        sync.releaseShared(1);

    }

2、线程等待,在计算器未到达0之前会一直等待

  public void await() throws InterruptedException {

        sync.acquireSharedInterruptibly(1);

    }

 

好,下面来演示两个demo.

1、等待所有子线程执行完成后再执行主线程的情况

2、模拟高并发的情况

 

代码如下:

package com.figo.study.test;

 

import java.util.concurrent.CountDownLatch;

/**

 * test CountDownLatch

 * @author figo

 * 20180605.

 */

public class TestSomething {

 

public static void  main(String[] args) {

//testWaitThread();

testConcurrent();

        }

/**

* 1、模拟所有子线程都执行完成后再执行主线程

* countdownLatch计数,模拟子线程执行完成之后再执行主线程

* 这个也可以用future来实现

*/

public static void testWaitThread()

{

final CountDownLatch latch = new CountDownLatch(2);

new Thread(){

            public void run() {

                try {

                    System.out.println(“子线程”+Thread.currentThread().getName()+”正在执行”);

                   Thread.sleep(3000);

                   System.out.println(“子线程”+Thread.currentThread().getName()+”执行完毕”);

                   latch.countDown();

               } catch (InterruptedException e) {

                   e.printStackTrace();

               }

            };

        }.start();

 

        new Thread(){

            public void run() {

                try {

                    System.out.println(“子线程”+Thread.currentThread().getName()+”正在执行”);

                    Thread.sleep(3000);

                    System.out.println(“子线程”+Thread.currentThread().getName()+”执行完毕”);

                    latch.countDown();

               } catch (InterruptedException e) {

                   e.printStackTrace();

               }

            };

        }.start();

 

        try {

            System.out.println(“等待2个子线程执行完毕…”);

           latch.await();

           System.out.println(“2个子线程已经执行完毕”);

           System.out.println(“继续执行主线程”);

       } catch (InterruptedException e) {

           e.printStackTrace();

       }

}

 

/**

     * 线程数量

     */

    public static final int THREAD_NUM = 100;

 

    /**

     * 开始时间

     */

    private static long startTime = 0L;

    /**

     * 2、模拟高并发

     */

public static void testConcurrent()

{

    try {

            startTime = System.currentTimeMillis();

            System.out.println(“CountDownLatch started at: ” + startTime);

 

            // 初始化计数器为1

            CountDownLatch countDownLatch = new CountDownLatch(1);

 

            for (int i = 0; i < THREAD_NUM; i ++) {

                new Thread(new Run(countDownLatch)).start();

            }

 

            // 启动多个线程

            countDownLatch.countDown();

 

        } catch (Exception e) {

            System.out.println(“Exception: ” + e);

        }

}

/**

     * 线程类

     */

    private static class Run implements Runnable {

        private final CountDownLatch startLatch;

 

        public Run(CountDownLatch startLatch) {

            this.startLatch = startLatch;

        }

 

        @Override

        public void run() {

            try {

                // 线程等待

                startLatch.await();

 

                // 模拟耗时操作

                Thread.sleep(3000);

 

                long endTime = System.currentTimeMillis();

                System.out.println(Thread.currentThread().getName() + ” ended at: ” + endTime + “, cost: ” + (endTime – startTime) + ” ms.”);

            } catch (Exception e) {

                e.printStackTrace();

            }

 

        }

    }

}
———————
作者:志飞
来源:CSDN
原文:https://blog.csdn.net/figo0423/article/details/80604921
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/kira2will/p/10486567.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/106945.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • css半透明层

    css半透明层首次登录弹出提示层,主要有两个层:半透明层,遮住下面的内容;提示层(主要内容),下面为这两个层的css样式。针对IE透明使用的是filter:alpha(opacity=35),针对FF透明的相关代码是opacity:0.35,这样至少在IE和FF下是兼容的,通过测试。.mask{ border:0px; background:#000; width:100%; …

  • 安捷伦示波器连接电脑没反应_安捷伦示波器升级

    安捷伦示波器连接电脑没反应_安捷伦示波器升级调试或者测试电路的过程中,示波器是比不可少的东西,且常需要保存示波器的波形,可以通过一条网线把示波器与电脑连接起来,这样就可以在电脑上方便的保存波形图,怎么实现示波器和电脑连接,我们以安捷伦示波器DSO7052B为例,其他示波器类似。1.首先通过一条网线连接示波器和电脑,在电脑上找到:网络和共享中心->以太网状态->以太网属性->TCP/IPv4协议,点击属性2…

    2022年10月12日
  • 在python中用来安装第三方库的常用工具_什么库用于安装管理Python扩展包

    在python中用来安装第三方库的常用工具_什么库用于安装管理Python扩展包Python有一个全球社区:在这里,我们可以搜索Python第三方库的任何话题。PyPI的全称是Python包指数指Python包的指数。它是由PSF(Python软件基金会)和显示全球Python计算生态系统。我们需要学会使用PyPI的主要网站,搜索和发现我们使用第三方Python库和关心。例如,如果您正在开发一个blockchain-related程序,您需要使用Python的计算生态三个步…

    2022年10月14日
  • mysql启动命令 linux命令,linux下mysql 启动命令

    mysql启动命令 linux命令,linux下mysql 启动命令1,使用service启动、关闭MySQL服务servicemysqlstartservicemysqlstopservicemysqlrestart运行上面命令,其实是service命令去找/etc/init.d下的相关的mysql脚本去执行启动、关闭动作。2,使用/etc/init.d/mysql启动、关闭MySQL服务,[root@DB-Serverbin]#/etc/in…

  • Java Spring 框架详解

    Java Spring 框架详解文章目录1Spring入门1.1Spring简介1.1.1Spring的由来1.1.2Spring的优点1.1.3Spring的体系结构1.2Spring开发环境1.2.1环境准备1.2.2创建Spring工程1.3使用IDEA开发Spring入门程序2SpringIoC2.1SpringIoC的基本概念2.2SpringIoC容器2.2.1BeanFactory2.2.2ApplicationContext3SpringBean4SpringAOP

  • 40个Java集合类面试题和答案

    40个Java集合类面试题和答案1.Java集合框架是什么?说出一些集合框架的优点?每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。集合框架的部分优点如下:(1…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号