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

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

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

模拟高并发的情况

在多线程编程里,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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • hadoop调优方法(和也篇)

    前言本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系正文RM的内存资源配置,配置的是资源调度相关ID配置说明RM1yarn.scheduler.minimum-allocation-mb分配给AM单个容器可申请的最小内存RM2yarn.scheduler.maximum-allocation-mb分配给AM单个容器可申请

    2022年4月12日
    34
  • python爬虫文件代码大全-23个Python爬虫开源项目代码

    python爬虫文件代码大全-23个Python爬虫开源项目代码今天为大家整理了23个Python爬虫项目。整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心。所有链接指向GitHub,祝大家玩的愉快1、WechatSogou[1]–微信公众号爬虫。基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典。2、DouBanSpider[2]–豆瓣读书爬虫。可以爬下豆瓣读书标签下的所有…

    2022年5月13日
    140
  • LOAM 论文及原理分析「建议收藏」

    LOAM 论文及原理分析「建议收藏」前言:由于对三维激光SLAM比较感兴趣,并且最近也在找无人驾驶激光SLAM算法的岗位,所以花了一个多月把LOAM的论文和源码好好看了一遍。发现论文还是比较容易明白,但一看代码全是坑。看论文懂了,看代码似懂非懂。为了尽快把这坑填上,所以诚邀读者一起探讨。作者始终认为填坑最好的方法是拉别人和你一起填坑。由于三千多行的源码不是一篇博客能够讲明白的,所以这篇博客主要讲一下我对LOAM论文…

    2022年5月11日
    36
  • length命令怎么用Matlab,matlab中length函数用法「建议收藏」

    length命令怎么用Matlab,matlab中length函数用法「建议收藏」matlab中的length表示什么?应该如何使用?length:数组长度(即行数或列数中的较大值);使用方法:n=length(A):如果A为非空数组,返回行数和列数两者之间数值较大的那一个值,即相当于执行了max(size(A));如果A为空数组,则返回0;如果A是一个向量则返回A的长度。length(x)在matlab中是什么意思?iflength(h)>1||h<0…

    2022年6月9日
    66
  • if (donutString.indexOf(“dozen”) != -1)是什么意思

    if (donutString.indexOf(“dozen”) != -1)是什么意思

    2021年10月29日
    67
  • 基于51单片机的步进电机的控制

    基于51单片机的步进电机的控制前面笔者分享过基于51单片机的两种小车制作,我们利用的是L298N驱动控制电机转动,那么接下来,笔者给大家介绍两种利用51单片机控制步进电机的小程序。首先我们要如何使电机转动呢,源程序如下:#include&lt;reg52.h&gt;unsignedcharcodeF_Rotation[4]={0x02,0x04,0x08,0x10};//正转表格,换算成二进制00…

    2022年5月31日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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