// 不多 BB,上代码:==>
package com.baidu.test.junit;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.taikang.Application;
/**
- 多线程 Junit 单元测试
- @author LiuDong
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
public class JunitThreadTest {
/** * 模拟100米赛跑,n名选手已经准备就绪,只等一声令下,当所有人到达终点时,比赛结束 * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // 选手数量 final int num = 20; // 开始的倒数锁 final CountDownLatch begin = new CountDownLatch(1); // 结束的倒数锁 final CountDownLatch end = new CountDownLatch(num); // 十名选手 final ExecutorService exec = Executors.newFixedThreadPool(num); for (int i = 0; i < num; i++) { final int no = i + 1; Runnable run = new Runnable() { // 重写run()方法 @Override public void run() { try { // 如果当前计数为零,则此方法立即返回 // 等待 begin.await(); // 可以写点循环控制每个运动动员跑多少圈(长跑) Thread.sleep((long) (Math.random() * 10000)); System.out.println("NO." + no + "arrived"); } catch (InterruptedException e) { e.printStackTrace(); } finally { // 每个选手到达终点时,end就减一 end.countDown(); } } }; exec.submit(run); } System.out.println("Game Start"); // begin减一,开始游戏 begin.countDown(); // 等待end变为0,即所有选手都到达终点 end.await(); System.out.println("Game Over"); exec.shutdown(); }
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于