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 ...
随机推荐
- Word字体与像素的对应关系
英文字体的1磅(pt),相当于1/72 英寸(inch),约等于1/2.8mm.12PT的字打印出来约为4.2mm.网页中12px的字才相当于12像素. 虽然 四号=(14/72)*96=18.6px ...
- TS-TCC: 通过时序和上下文对比学习时间序列表征《Time-Series Representation Learning via Temporal and Contextual Contrasting》(时间序列、时序表征、时间和上下文对比、对比学习、自监督学习、半监督学习)
现在是2023年11月14日的22:15,肝不动了,要不先回寝室吧,明天把这篇看了,然后把文档写了.OK,明天的To Do List. 现在是2023年11月15日的10:35,继续. 论文:Time ...
- TypeScript 高级教程 – TypeScript 类型体操 (第三篇)
前言 在 第一部 – 把 TypeScript 当强类型语言使用 和 第二部 – 把 TypeScript 当编程语言使用 后, 我们几乎已经把 TypeScript 的招数学完了. 第三部就要开始做 ...
- 深入理解JNDI注入—RMI/LDAP攻击
目录 前言 JNDI 注入简单理解 透过Weblogic漏洞深入理解 RMI与LDAP的区别 JNDI+RMI 漏洞代码触发链 lookup触发链 JNDI+LDAP 前言 本篇文章初衷是在研究log ...
- SQL limit字句
limit用法介绍 limit子句可以返回检索查询行的某一连续的部分 用法介绍: SELECT column_list FROM table1 ORDER BY column_list LIMIT r ...
- Nuxt Kit 实用工具的使用示例
title: Nuxt Kit 实用工具的使用示例 date: 2024/9/25 updated: 2024/9/25 author: cmdragon excerpt: 摘要:本文介绍了Nuxt ...
- Foxmail 设置个人签名的方法
事件起因: 在foxmail设置一个好看的个人签名 具体设置过程: 打开Foxmail - 右上角设置 -写邮件 签名的设置 字体格式:等线 10px 黑色 内容: 名字 | 名字英文 职位 个人邮箱 ...
- golang的类型转换
今天我们来说说一个大家每天都在做但很少深入思考的操作--类型转换. 本文索引 一行奇怪的代码 go的类型转换 数值类型之间互相转换 unsafe相关的转换 字符串到byte和rune切片的转换 sli ...
- 如何创建免费版本的ABP分离模块?
如何创建免费版本的ABP分离模块? 由于ABP最近官方大改革,我们打开ABP.IO 官方会发现通过Cli创建模板的时候不能创建Trered类型的了 就是创建一个分层的解决方案,其中Web和Http A ...
- meminfo一些容易混淆的点
MemTotal: 688576 kB 总内存 MemFree: 153736 kB 空闲内存 MemAvailable: 339884 kB 可用内存 Buffers: 16 kB 给文件的缓冲大小 ...