java同时启动多个线程(一)
当我们需要同时启动N个线程时, 可以使用 java.util.concurrent.CyclicBarrier 类解决。
demo:
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;public class TestCyclicBarrier {public static void main(String[] args) {CyclicBarrier cyclicBarrier = new CyclicBarrier(3);for (int i=0; i<3; i++) {Thread thread = new Thread(new Work(cyclicBarrier));thread.setName("线程-" + (i+1));thread.start();}}
}class Work implements Runnable {private final CyclicBarrier cyclicBarrier;public Work(CyclicBarrier cyclicBarrier) {this.cyclicBarrier = cyclicBarrier;}@Overridepublic void run() {try {/*** CyclicBarrier类的await()方法对当前线程(运行cyclicBarrier.await()代码的线程)进行加锁,然后进入await状态;* 当进入CyclicBarrier类的线程数(也就是调用cyclicBarrier.await()方法的线程)等于初始化CyclicBarrier类时配置的线程数时;* 然后通过signalAll()方法唤醒所有的线程。*/cyclicBarrier.await();System.out.println(Thread.currentThread().getName() + "启动时间是" + System.currentTimeMillis());} catch (InterruptedException | BrokenBarrierException e1) {e1.printStackTrace();}}}
运行结果:
线程-2启动时间是1552287560514
线程-1启动时间是1552287560543
线程-3启动时间是1552287560544
java同时启动多个线程(一)相关推荐
- java线程怎么重启_如何在Java中启动/停止/重启线程?
10 个答案: 答案 0 :(得分:41) 一旦线程停止,您就无法重新启动它.但是,没有什么可以阻止您创建和启动新线程. 选项1:创建一个新线程,而不是尝试重新启动. 选项2:而不是让线程停止,让它等 ...
- java runnable 启动_Java开发笔记(九十七)利用Runnable启动线程
前面介绍了线程的基本用法,按理说足够一般的场合使用了,只是每次开辟新线程,都得单独定义专门的线程类,着实开销不小.注意到新线程内部真正需要开发者重写的仅有run方法,其实就是一段代码块,分线程启动之后 ...
- 线程组多次调用_详细分析 Java 中启动线程的正确和错误方式
start 方法和 run 方法的比较 代码演示: /** * * start() 和 run() 的比较 * * * @author 踏雪彡寻梅 * @version 1.0 * @da ...
- 不允许使用java方式启动_细品 Java 中启动线程的正确和错误方式
细品 Java 中启动线程的正确和错误方式 前文回顾详细分析 Java 中实现多线程的方法有几种?(从本质上出发) start 方法和 run 方法的比较 代码演示:/** * * start() 和 ...
- 线程启动语句的顺序是否决定线程的执行次序。_详细分析 Java 中启动线程的正确和错误方式
start 方法和 run 方法的比较 代码演示: /** * * start() 和 run() 的比较 * * * @author 踏雪彡寻梅 * @version 1.0 * @date 202 ...
- java匿名启动线程_使用匿名内部类:来创建线程的两种方式
[Java]基础31:创建线程的两种方式 谢谢你的观看. 今天是我自学Java的第31天. 你的观看便是对我最大的鼓励. 话不多说,开始今天的学习: 线程的创建有两种方式,昨天学习过其中的一种: 创建 ...
- android 双线程等待,在Java/Android中启动另一个线程之前如何等待线程完成?
在回答您的问题之前,我强烈建议您查看 ExecutorServices,例如 ThreadPoolExecutor. 现在回答你的问题: 如果要等待上一个线程完成,在开始下一步之前,您可以在之间添加t ...
- java线程写个计时器_用Java开发C/S应用(二):启动新的线程,制作一个计时器...
接着上面的例子,我们来制作一个计时器,呃,这个例子或许有些难,我会讲的尽量详细 我先来介绍启动新线程的方法: Runnable runnable=newRunnable() {publicvoidru ...
- Java高并发编程:线程范围内共享数据
笔记摘要 所谓线程范围内共享数据,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据,API中为我们提供了一个操作线程范围内共享数据的类Threa ...
最新文章
- 为什么Scrum模式适合软件开发?
- 【原创翻译】文件与文件夹
- mysql const ref_mysql explain详解
- 借汉诺塔理解栈与递归
- Leetcode--84. 柱状图中最大的矩形
- Android图片压缩,不失真,上线项目
- 那个男人 ,他带着Vue3来了~
- grpc通信原理_gRPC原理简析
- python就业方向-Python的5大就业方向,薪资诱人前景好!
- 机器学习算法与Python实践之逻辑回归(Logistic Regression)
- 慕课网C#开发轻松入门 6-1练习题目
- 纪念日该给女朋友送什么礼物?
- R语言 指定列缺失值定值填充
- 机器人前沿--下肢外骨骼机器人
- 百度女程序员半夜打车被司机嘲讽:加班到一点,收入不如我,图啥
- js Array 标准方法
- C语言编程:求水仙花数。输入一个正整数n,计算n位水仙花数。
- AIM Tech Round (Div. 1) C. Electric Charges 二分
- 必应搜索 - 显示历史记录
- windows 下 nextcloud 的偏保姆级搭建教程