多线程跑单测一般碰到的问题就是主线程执行完之后子线程还在运行,但是单测就结束了拿不到结果。

所以本质上只需要子线程执行完毕之后告诉主线程,再这之前主线程一直等待即可。

如果是线程池可以这样:

for (int i = 0; i < 50; i++) {

executorServicePool.execute(new Worker(i));

}

executorServicePool.shutdown();

while (!executorServicePool.awaitTermination(1, TimeUnit.SECONDS)) {

logger.info("worker running");

}

logger.info("worker over");

每隔一秒钟检查一次线程池里的任务执行完没有,没有执行完就阻塞主线程。

CountDownLatch 这样的并发工具也不错。

private static void countDownLatch() throws Exception{

int thread = 3 ;

long start = System.currentTimeMillis();

final CountDownLatch countDown = new CountDownLatch(thread);

for (int i= 0 ;i

new Thread(new Runnable() {

@Override

public void run() {

LOGGER.info("thread run");

try {

Thread.sleep(2000);

countDown.countDown();

LOGGER.info("thread end");

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}).start();

}

countDown.await();

long stop = System.currentTimeMillis();

LOGGER.info("main over total time={}",stop-start);

}

当然 join 的方式也是可以的。

private static void join() throws InterruptedException {

Thread t1 = new Thread(new Runnable() {

@Override

public void run() {

LOGGER.info("running");

try {

Thread.sleep(3000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}) ;

Thread t2 = new Thread(new Runnable() {

@Override

public void run() {

LOGGER.info("running2");

try {

Thread.sleep(4000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}) ;

t1.start();

t2.start();

//等待线程1终止

t1.join();

//等待线程2终止

t2.join();

LOGGER.info("main over");

}

更多内容可以查看:

java+跑多线程_java项目怎么多线程跑单元测试,ide是intellij?相关推荐

  1. java实现天天酷跑开发_Java项目实战之天天酷跑

    作者:MyHuey 来源:blog.csdn.net/qq_45909299 首先,写一个需求文档: 一.项目名称:<天天酷跑>(RunDay) 二.功能介绍:闯关类游戏,玩家登录后,选择 ...

  2. java定时任务中使用多线程_java项目中如何利用多线程实现一个定时器任务

    java项目中如何利用多线程实现一个定时器任务 发布时间:2020-11-10 16:04:03 来源:亿速云 阅读:86 作者:Leah 今天就跟大家聊聊有关java项目中如何利用多线程实现一个定时 ...

  3. java基础线程_Java基础之多线程没那么复杂!

    多线程的引入 1.什么是多线程 线程是程序执行的一条路径,一个进程中可以包含多条线程;多线程并发执行可以提高程序的效率 2.进程和线程之间的关系 操作系统可以同时执行多个任务,每个任务就是进程;进程可 ...

  4. java future用法_Java中的多线程知识点

    如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...

  5. java简单多线程_java中实现多线程的几种方式(简单实现)

    一.以下只是简单的实现多线程 1:继承Thread 2:实现 Runnable 3:实现callable 如果需要返回值使用callable,如果不需要返回最好使用runnable,因为继承只能单继承 ...

  6. java如何实现多线程_Java中实现多线程的两种方式

    /** * 使用Thread类模拟4个售票窗口共同卖100张火车票的程序 * * 没有共享数据,每个线程各卖100张火车票 * * @author jiqinlin * */public class  ...

  7. vs如何写多线程_java中的多线程的示例

    在讨论多线程之前,让我们先讨论线程.线程是进程中轻量级的最小部分,可以与同一进程的其他部分(其他线程)并发运行.线程是独立的,因为它们都有独立的执行路径,这就是为什么如果一个线程中发生异常,它不会影响 ...

  8. java通讯课程_Java项目实战-仿QQ即时通讯软件视频课程

    1.学习JAVA的Swing做UI设计, 2学习用JAVA语言进行数据库编程,熟练使用Connection,Statement,PreparedStatement,ResultSet等数据库类库: 3 ...

  9. java 不退出_Java项目不挂断运行,即当账户退出或终端关闭时,程序仍然运行,并附上执行脚本...

    把打包好的jar包上传服务器以后,直接运行java -jar+文件名 命令即可以完成启动. 若需要在公网上如何不挂断开启程序,可以使用nohup java -jar +文件名 &命令,其中no ...

最新文章

  1. SQL Server之游标的基础知识
  2. PHP中 $_SERVER的信息汇总
  3. android reboot 定时重启可靠吗,请教一下有人做过安卓系统 reboot 重启之后,appium 能自动重新连接吗...
  4. 找对象不能只看TA的外表
  5. CCF2016.4 - C题
  6. Java static , final和常量设计
  7. arcgis分隔图层重复出文件_ArcGIS制图技巧讲解,处理好细节才能让图更专业!
  8. 技嘉z77主板msata速度_技嘉小雕、微星迫击炮、华硕电竞特工三款主板对比
  9. XP系统访问win7共享文件夹教程和提示没有权限的解决办法
  10. mysql hyperloglog_Redis HyperLogLog
  11. rpg游戏地图绘制android,基于Android studio 的rpg游戏大地图的绘制
  12. 简述导线平差计算的五个步骤_闭合导线平差计算步骤
  13. 数控机床CNC编程入门【G-code】
  14. -2. JavaScript Methods
  15. 计算机断电无法启动不了系统,电脑停电后无法开机怎么办?|电脑停电无法启动的解决方法...
  16. NDT 公式推导及源码解析(1)
  17. E. Arranging The Sheep
  18. GB28181监控视频统一汇聚平台LiveGBS将海康大华华为宇视等厂家监控设备统一接入后如何生成固定播放链接或者固定的流地址可以直接无插件播放或者拉取
  19. 【Android】利用爬虫将电影网站打包成一个APP
  20. Location定位程序驱动合集

热门文章

  1. python设置list_python之list
  2. 小程序 const moment = require('moment')_小程序依赖分析实践
  3. 巧用计算机辅助培智生,计算机辅助设计答案
  4. 匹配追踪分解 时频 matlab,Matlab匹配追踪(MatchingPursuit) 之一
  5. 机器学习中的度量——字符串距离
  6. hive学习08天-一次hvie面试题
  7. Eclipse快捷键 10个最有用的快捷键---摘录
  8. Objective-C语法快速参考
  9. CodeForces Manthan 2011 D. Optical Experiment(动态规划)
  10. (转)互联网——降级论