当我们需要同时启动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同时启动多个线程(一)相关推荐

  1. java线程怎么重启_如何在Java中启动/停止/重启线程?

    10 个答案: 答案 0 :(得分:41) 一旦线程停止,您就无法重新启动它.但是,没有什么可以阻止您创建和启动新线程. 选项1:创建一个新线程,而不是尝试重新启动. 选项2:而不是让线程停止,让它等 ...

  2. java runnable 启动_Java开发笔记(九十七)利用Runnable启动线程

    前面介绍了线程的基本用法,按理说足够一般的场合使用了,只是每次开辟新线程,都得单独定义专门的线程类,着实开销不小.注意到新线程内部真正需要开发者重写的仅有run方法,其实就是一段代码块,分线程启动之后 ...

  3. 线程组多次调用_详细分析 Java 中启动线程的正确和错误方式

    start 方法和 run 方法的比较 代码演示: /** *  * start() 和 run() 的比较  *  *  * @author 踏雪彡寻梅  * @version 1.0  * @da ...

  4. 不允许使用java方式启动_细品 Java 中启动线程的正确和错误方式

    细品 Java 中启动线程的正确和错误方式 前文回顾详细分析 Java 中实现多线程的方法有几种?(从本质上出发) start 方法和 run 方法的比较 代码演示:/** * * start() 和 ...

  5. 线程启动语句的顺序是否决定线程的执行次序。_详细分析 Java 中启动线程的正确和错误方式

    start 方法和 run 方法的比较 代码演示: /** * * start() 和 run() 的比较 * * * @author 踏雪彡寻梅 * @version 1.0 * @date 202 ...

  6. java匿名启动线程_使用匿名内部类:来创建线程的两种方式

    [Java]基础31:创建线程的两种方式 谢谢你的观看. 今天是我自学Java的第31天. 你的观看便是对我最大的鼓励. 话不多说,开始今天的学习: 线程的创建有两种方式,昨天学习过其中的一种: 创建 ...

  7. android 双线程等待,在Java/Android中启动另一个线程之前如何等待线程完成?

    在回答您的问题之前,我强烈建议您查看 ExecutorServices,例如 ThreadPoolExecutor. 现在回答你的问题: 如果要等待上一个线程完成,在开始下一步之前,您可以在之间添加t ...

  8. java线程写个计时器_用Java开发C/S应用(二):启动新的线程,制作一个计时器...

    接着上面的例子,我们来制作一个计时器,呃,这个例子或许有些难,我会讲的尽量详细 我先来介绍启动新线程的方法: Runnable runnable=newRunnable() {publicvoidru ...

  9. Java高并发编程:线程范围内共享数据

    笔记摘要 所谓线程范围内共享数据,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据,API中为我们提供了一个操作线程范围内共享数据的类Threa ...

最新文章

  1. 为什么Scrum模式适合软件开发?
  2. 【原创翻译】文件与文件夹
  3. mysql const ref_mysql explain详解
  4. 借汉诺塔理解栈与递归
  5. Leetcode--84. 柱状图中最大的矩形
  6. Android图片压缩,不失真,上线项目
  7. 那个男人 ,他带着Vue3来了~
  8. grpc通信原理_gRPC原理简析
  9. python就业方向-Python的5大就业方向,薪资诱人前景好!
  10. 机器学习算法与Python实践之逻辑回归(Logistic Regression)
  11. 慕课网C#开发轻松入门 6-1练习题目
  12. 纪念日该给女朋友送什么礼物?
  13. R语言 指定列缺失值定值填充
  14. 机器人前沿--下肢外骨骼机器人
  15. 百度女程序员半夜打车被司机嘲讽:加班到一点,收入不如我,图啥
  16. js Array 标准方法
  17. C语言编程:求水仙花数。输入一个正整数n,计算n位水仙花数。
  18. AIM Tech Round (Div. 1) C. Electric Charges 二分
  19. 必应搜索 - 显示历史记录
  20. windows 下 nextcloud 的偏保姆级搭建教程

热门文章

  1. hbuildx中文乱码
  2. Selenium批量查询运动员技术等级
  3. drv10893器件的使用
  4. go 格式化占位符详解
  5. 每周全球科技十大新闻(2020.8.17-8.23)
  6. ATM取款机详细代码
  7. 什么是 Tableau?
  8. GB2312(部分GBK)汉字编码表
  9. win10系统administrator账户密码忘记
  10. 互联网大鱼吃小鱼背后:十亿消费者的推崇