CountDownLatch的高并发与顺序执行 待我称王封你为后i 2022-05-16 15:25 137阅读 0赞 一、高并发: @Service public class ConcurrentTest \{ /\*\* \* 线程数量 \*/ public static final int THREAD\_NUM = 100; /\*\* \* 开始时间 \*/ private static long startTime = 0L; @PostConstruct public void init() \{ 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 class Run implements Runnable \{ private final CountDownLatch startLatch; public Run(CountDownLatch startLatch) \{ this.startLatch = startLatch; \} @Override public void run() \{ try \{ // 线程等待 startLatch.await(); // 执行操作 System.out.println("当前线程:"+Thread.currentThread().getName()+"执行自己的方法"); long endTime = System.currentTimeMillis(); System.out.println(Thread.currentThread().getName() + " ended at: " + endTime + ", cost: " + (endTime - startTime) + " ms."); \} catch (Exception e) \{ e.printStackTrace(); \} \} \} public static void main(String\[\] args) \{ ConcurrentTest test = new ConcurrentTest(); test.init(); \} \} 二、顺序执行 public class Test1 \{ public static void main(String\[\] args) \{ CountDownLatch c0 = new CountDownLatch(0); CountDownLatch c1 = new CountDownLatch(1); CountDownLatch c2 = new CountDownLatch(1); Thread t1 = new Thread(new Work(c0, c1)); //c0为0,t1可以执行。t1的计数器减1 Thread t2 = new Thread(new Work(c1, c2)); //t1的计数器为0时,t2才能执行。t2的计数器c2减1 Thread t3 = new Thread(new Work(c2, c2)); //t2的计数器c2为0时,t3才能执行 t2.start(); t1.start(); t3.start(); \} //定义Work线程类,需要传入开始和结束的CountDownLatch参数 static class Work implements Runnable \{ CountDownLatch c1; CountDownLatch c2; Work(CountDownLatch c1, CountDownLatch c2)\{ super(); this.c1=c1; this.c2=c2; \} public void run() \{ try \{ c1.await();//前一线程为0才可以执行 System.out.println("开始执行线程:"+ Thread.currentThread().getName()); c2.countDown();//本线程计数器减少 \} catch (InterruptedException e) \{ \} \} \} \}
相关 Java并发编程:CountDownLatch与Semaphore的区别 CountDownLatch和Semaphore都是Java中多线程同步的工具,但它们的作用和使用场景有所不同。 1. CountDownLatch: - CountD 冷不防/ 2024年09月11日 14:24/ 0 赞/ 19 阅读
相关 通过CountDownLatch工具类,模拟高并发 package com.cdy.wx.thread; import org.slf4j.Logger; import org.slf4j.... 曾经终败给现在/ 2024年04月18日 14:23/ 0 赞/ 27 阅读
相关 深入理解高并发编程 - AQS 中的 CountDownLatch、Semaphore 与 CyclicBarrier AQS AQS(AbstractQueuedSynchronizer)是 Java 中用于实现同步器的一个抽象基类。它提供了构建各种同步工具的基础框架,如锁、信号量、倒计 Bertha 。/ 2023年10月15日 09:19/ 0 赞/ 84 阅读
相关 [Java] CountDownLatch 模拟高并发 参考: [Class CountDownLatch][] [Coordinating threads with CountDownLatch][] 一、简介 C 灰太狼/ 2022年07月16日 06:43/ 0 赞/ 219 阅读
相关 并发编程--CountDownLatch CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。CountDownLatch的一个非常典型的应用场景是:有一 青旅半醒/ 2022年06月17日 03:12/ 0 赞/ 171 阅读
相关 通过CountDownLatch模拟高并发下测试各种单例模式的执行结果 单例模式一般写法有多种,那么哪种相对来说效果比较好。下面一起看看我的测试结果吧。 我是通过CountDownLatch来模拟刚并发下,各种单例模式的执 亦凉/ 2022年05月30日 05:59/ 0 赞/ 122 阅读
相关 CountDownLatch的高并发与顺序执行 一、高并发: @Service public class ConcurrentTest \{ /\\ \ 线程数量 \/ 待我称王封你为后i/ 2022年05月16日 15:25/ 0 赞/ 138 阅读
相关 java 利用countdownlatch模拟高并发情况 edison\_is\_on\_Call java 正文 java 利用countdownlatch模拟高并发情况 原 edison\_kwok edison\_kwok 太过爱你忘了你带给我的痛/ 2022年02月02日 23:13/ 0 赞/ 332 阅读
相关 并发工具之CountDownLatch与CyclicBarrier 文章目录 * 倒计时器CountDownLatch 循环栅栏CyclicBarrier CountDownLatch与Cycl... 你的名字/ 2020年06月15日 13:31/ 0 赞/ 776 阅读
还没有评论,来说两句吧...