juc 学习
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 学习的更多相关文章
- JUC学习笔记(六)
JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...
- JUC学习笔记(五)
JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...
- JUC学习笔记(四)
JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...
- JUC学习笔记(三)
JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...
- JUC学习笔记(二)
JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html 1.Lock接口 1.1.Synchronized 1.1.1.Synchronized关 ...
- JUC学习笔记——进程与线程
JUC学习笔记--进程与线程 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的进程与线程部分 我们会分为以下几部分进行介绍: 进程与线程 并发与并行 同步与异步 线程详解 进程与线程 ...
- JUC学习笔记——共享模型之管程
JUC学习笔记--共享模型之管程 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的管程部分 我们会分为以下几部分进行介绍: 共享问题 共享问题解决方案 线程安全分析 Monitor ...
- JUC学习笔记——共享模型之内存
JUC学习笔记--共享模型之内存 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的内存部分 我们会分为以下几部分进行介绍: Java内存模型 可见性 模式之两阶段终止 模式之Balk ...
- JUC学习笔记——共享模型之不可变
JUC学习笔记--共享模型之不可变 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的不可变内容 我们会分为以下几部分进行介绍: 不可变案例 不可变设计 模式之享元 原理之final ...
- JUC学习笔记——并发工具线程池
JUC学习笔记--并发工具线程池 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的并发工具线程池 我们会分为以下几部分进行介绍: 线程池介绍 自定义线程池 模式之Worker Thr ...
随机推荐
- anaconda-navigator 卡在 loading applications
其实上学期开学就已经这样了,我又不用,再者我上课对这些依赖不大,就没管. 这几天想彻底搞定吧.现状了opencv,最后搞了半天,还是通过安装相应版本的.whl文件搞定了,无法conda install ...
- VMware安装CentOS7及远程登录详细教程
写在前面 主要使用软件: VMware Workstation Pro17 Navicat Premium17 Xshell7 Xftp7 1.在虚拟机安装CentOS7 访问阿里云镜像站 ,选择标记 ...
- TypeScript – 冷知识
当 generic return 遇上 parameter 报错了.原因是 querySelector 默认返回类型是抽象的 Element. 而 method 参数要求的是具体的 InputElem ...
- SQL Server Temporary Table & Table Variable (临时表和表变量)
参考: 在数据库中临时表什么时候会被清除呢 Temporary Tables And Table Variables In SQL 基本常识 1. 局部临时表(#开头)只对当前连接有效,当前连接断开时 ...
- 【linux】【docker】Docker默认网段配置导致无法访问
背景 集团有N个基地,所有基地的网络使用的是172.x.x.x网段,这本身没有什么问题!但Docker默认的桥接网段也是172.17.x.x的,如果不修改docker的默认配置会导致个别基地无法访问! ...
- 基于全息感知的智慧高速IT设施监控运维方案
作为智能交通的重要细分领域,建设智慧高速是实施交通强国战略的重要基础.在信息化时代,交通行业已经依托信息化建设取得了显著的成果,其中以收费网络.办公网络.监控网络和通讯网络为基础的网络架构已经形成,并 ...
- slab分配器正式被弃用,slub成为分配器唯一选择
在使用slab分配器进行内存分配时,可能会出现以下缺点: 内存碎片化.由于slab分配器需要将内存分成大小相同的块,如果分配不均衡或者对象大小不同,就容易导致内存碎片化. 性能下降.Slab分配器将内 ...
- 对3D图像进行裁剪
在对医学图像进行深度学习的过程中,我们会遇到图片过大,导致train的过程中网络会瘫痪,所以我们会考虑到对图像进行分割.比如一张155x240x240的图像,我们可以将他分割成一系列128x128x1 ...
- element表单校验 【登录】
async btnOK () { // 1. 表单校验 (调用表单的校验方法获取校验结果) // this.$refs.formRef.validate(function (valid) { // c ...
- 一、Tomcat基础知识与运行原理
本章节为介绍如何安装Tomcat工具以及其主要架构知识概念,深入浅出让新人玩家理解为什么选择该容器以及该容器的优点 web服务器 概念 服务器:安装了服务器软件的计算机 服务器软件:接收用户的请求,处 ...