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

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

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

模拟高并发的情况

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


相关推荐

发表回复

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

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