CyclicBarrier

应用场景是比如在做压力测试时,使用多少个用户并发,做集合点测试。

比如设置 100个用户并发,100个用户同时进行压测,只有100个用户压测完毕时,才能再发起下一波的压力测试。

package com.study.juc;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException; public class CyclicBarrierDemo { public static void main(String[] args) throws BrokenBarrierException, InterruptedException, TimeoutException {
CyclicBarrier cyclicBarrier=new CyclicBarrier(2,()->{
System.err.println( "集合完毕出发!");
});
for(int i=1;i<=3;i++){
int tmp = i;
new Thread(()->{
System.err.println(Thread.currentThread().getName() +"线程before:"+ tmp);
try {
cyclicBarrier.await(2, TimeUnit.SECONDS);
System.err.println(Thread.currentThread().getName() +"线程after:"+ tmp);
} catch (Exception e) {
e.printStackTrace();
}
},"CyclicBarrier").start();
}
}
}

CountDownLatch

减法计数器。

package com.study.juc;

import java.util.concurrent.CountDownLatch;

public class CountDownLatchDemo {

    public static void main(String[] args) throws InterruptedException {
CountDownLatch latch=new CountDownLatch(13);
for(int i=1;i<=12;i++){
new Thread(()->{ System.err.println(Thread.currentThread().getName() +"before:" +latch.getCount());
latch.countDown();
System.err.println(Thread.currentThread().getName() +"after :" +latch.getCount()); },String.valueOf(i)).start();
}
latch.await();
}
}

使用信号量

public class SemaphoreDemo {

public static void main(String[] args) {
Semaphore semaphore=new Semaphore(3);

Random random=new Random();

for(int i=1;i<=6;i++){
new Thread(()->{
try {
semaphore.acquire();
int second=random.nextInt(10);
System.err.println(Thread.currentThread().getName() +"时长"+second +"开始");
TimeUnit.SECONDS.sleep(second);
System.err.println(Thread.currentThread().getName()+"完成");
}
catch (InterruptedException ex){
ex.printStackTrace();
}
finally {
semaphore.release();
}
},"线程" +i).start();

}

}

}

 信号量的作用是:比如有三个车位,有6辆车,先进入三辆车,如果一辆车出来,后来的车可以进去,但始终只有三辆车同时停到车位。

juc 学习的更多相关文章

  1. JUC学习笔记(六)

    JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...

  2. JUC学习笔记(五)

    JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...

  3. JUC学习笔记(四)

    JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...

  4. JUC学习笔记(三)

    JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...

  5. JUC学习笔记(二)

    JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html 1.Lock接口 1.1.Synchronized 1.1.1.Synchronized关 ...

  6. JUC学习笔记——进程与线程

    JUC学习笔记--进程与线程 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的进程与线程部分 我们会分为以下几部分进行介绍: 进程与线程 并发与并行 同步与异步 线程详解 进程与线程 ...

  7. JUC学习笔记——共享模型之管程

    JUC学习笔记--共享模型之管程 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的管程部分 我们会分为以下几部分进行介绍: 共享问题 共享问题解决方案 线程安全分析 Monitor ...

  8. JUC学习笔记——共享模型之内存

    JUC学习笔记--共享模型之内存 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的内存部分 我们会分为以下几部分进行介绍: Java内存模型 可见性 模式之两阶段终止 模式之Balk ...

  9. JUC学习笔记——共享模型之不可变

    JUC学习笔记--共享模型之不可变 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的不可变内容 我们会分为以下几部分进行介绍: 不可变案例 不可变设计 模式之享元 原理之final ...

  10. JUC学习笔记——并发工具线程池

    JUC学习笔记--并发工具线程池 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的并发工具线程池 我们会分为以下几部分进行介绍: 线程池介绍 自定义线程池 模式之Worker Thr ...

随机推荐

  1. Python — 循环语句

    while循环语句 语法: 嵌套使用: for循环语句:(for循环外部不允许访问临时变量) 语法: 使用: 待处理的数据集: range语句: 嵌套for循环: continue: break: 随 ...

  2. docker基础镜像java版本选择和推荐

    背景 在编写dockerfile时,基础镜像要么太大,要么缺少jdk:dockerhub中的openjdk五花八门,不知道选择哪个 解决方案 我在项目中通常选择 openjdk作为基础镜像 FROM ...

  3. 嵌入式Linux ubi文件系统制作、分区设置、只读文件系统,uboot启动参数root

    当前平台, 基于君正的X10000平台的嵌入式Linux 系统 0  目的 我要设置根文件系统为可读写, 设置data分区上的文件系统为只读 1 设置各文件系统的读写属性 /bin/mount -o ...

  4. Task2 - IDA学习【进度 - 第二课】

    学习目标: - 无名侠的课,看二进制培训(第二集和第三集)(https://space.bilibili.com/7761039/video) - 会反汇编 - 会字符串搜索(f12) - 会简单异或 ...

  5. Linux_动态库与静态库(其一)

    1.动态库和静态库的定义 动态库(.so):动态库是编译后不嵌入目标文件中的共享库,在程序运行的时候才去链接动态库的代码,可以被多个程序共享使用,通常以 .so 结尾. 静态库(.a):静态库是将一组 ...

  6. 数据库周刊57丨Oracle 2021年度安全警报;MySQL 8.0.23发布;MySQL索引优化导致的死锁案例;巨杉数据库跨引擎事务实践;MongoDB企业级能力解析;OceanBase OBCP 实验指导手册……

    摘要:墨天轮数据库周刊第57期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档. 热门资讯 1.Oracle 2021年度安全警报: Critical Patch Update 发布8个 ...

  7. 树形结构体按照 sort 进行排序先按照字母排序 然后按照数字排序

    // 先按照字母排序 然后按照数字排序 function sortListByLetter(arr) { return arr.sort((a, b) => { if (isNaN(a.name ...

  8. 谈谈你对 vue 的理解

    vue 是创建用户界面的 js 框架 ,是创建 spa 应用的框架 :使用 mvvm 模式,数据驱动视图模型 ,业务逻辑和页面解构分离开发:使用高效的 diff 算法渲染页面结构 : 采用组件化模式, ...

  9. Python之py9-py9博客情况获取

    #!/usr/bin/env python # -*- coding:utf-8 -*- import os import re import datetime import requests url ...

  10. 揭秘 FineVideo 数据集构建的背后的秘密

    开放视频数据集稀缺,因此减缓了开源视频 AI 的发展.为此,我们构建了 FineVideo,这是一个包含 43,000 个视频的数据集,总时长为 3,400 小时,并带有丰富的描述.叙事细节.场景分割 ...