一、java代码模拟并发

1.1、一次并发

单次并发测试

1、使用CountDownLatch

  等待一个或多个线程一起执行

  详细参看:007-多线程-锁-JUC锁-CountDownLatch-闭锁【允许一个或多个线程,等待其他一组线程完成操作,再继续执行】

示例代码

    @Test
public void poolCountDownLatch() throws Exception {
int parrelnum=100;
//所有线程阻塞,然后统一开始
CountDownLatch begin = new CountDownLatch(1);
//主线程阻塞,直到所有分线程执行完毕
CountDownLatch end = new CountDownLatch(parrelnum);
List<Future<String>> futureList = new ArrayList<>();
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(parrelnum);
for (int i = 0; i < parrelnum; i++) {
Future<String> submit = fixedThreadPool.submit(() -> {
try {
//begin 阻塞所有线程
begin.await();
System.out.println("======-----------------------------"+ LocalDateTime.now());
// System.out.println("======-----------------------------"+ LocalDateTime.now()
// +":"+Thread.currentThread().getName()
// +";守护线程:"+Thread.currentThread().isDaemon());
Thread.sleep(new Random().nextInt(2000));
} catch (InterruptedException e) {
e.printStackTrace();
}
finally {
//end 执行完代码减一
end.countDown();
}
return "ok:"+LocalDateTime.now();
});
futureList.add(submit);
}
fixedThreadPool.shutdown(); try {
System.out.println(LocalDateTime.now()+":"+"1秒后统一开始");
Thread.sleep(1000);
//begin 减一 = 0 唤醒 阻塞的所有线程
begin.countDown();
for (Future<String> future : futureList) {
System.out.println(future.get());
}
//end 等待所有代码执行完毕
end.await();
System.out.println(LocalDateTime.now()+":"+"全部结束");
} catch (InterruptedException e) {
e.printStackTrace();
}
}

输出:

2019-08-02T22:58:23.762:1秒后统一开始
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.765
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.768
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.770
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.770
======-----------------------------2019-08-02T22:58:24.770
======-----------------------------2019-08-02T22:58:24.770
======-----------------------------2019-08-02T22:58:24.770
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.773
======-----------------------------2019-08-02T22:58:24.773
======-----------------------------2019-08-02T22:58:24.773
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.773
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.768
======-----------------------------2019-08-02T22:58:24.768
======-----------------------------2019-08-02T22:58:24.768
======-----------------------------2019-08-02T22:58:24.768
======-----------------------------2019-08-02T22:58:24.768
======-----------------------------2019-08-02T22:58:24.765
======-----------------------------2019-08-02T22:58:24.765
======-----------------------------2019-08-02T22:58:24.765
======-----------------------------2019-08-02T22:58:24.765
======-----------------------------2019-08-02T22:58:24.765
======-----------------------------2019-08-02T22:58:24.765
======-----------------------------2019-08-02T22:58:24.765
======-----------------------------2019-08-02T22:58:24.765
======-----------------------------2019-08-02T22:58:24.765
======-----------------------------2019-08-02T22:58:24.764
======-----------------------------2019-08-02T22:58:24.773
======-----------------------------2019-08-02T22:58:24.773
======-----------------------------2019-08-02T22:58:24.773
======-----------------------------2019-08-02T22:58:24.773
======-----------------------------2019-08-02T22:58:24.773
======-----------------------------2019-08-02T22:58:24.773
======-----------------------------2019-08-02T22:58:24.773
======-----------------------------2019-08-02T22:58:24.773
======-----------------------------2019-08-02T22:58:24.773
======-----------------------------2019-08-02T22:58:24.773
======-----------------------------2019-08-02T22:58:24.770
======-----------------------------2019-08-02T22:58:24.770
======-----------------------------2019-08-02T22:58:24.770
======-----------------------------2019-08-02T22:58:24.770
======-----------------------------2019-08-02T22:58:24.770
======-----------------------------2019-08-02T22:58:24.770
======-----------------------------2019-08-02T22:58:24.770
======-----------------------------2019-08-02T22:58:24.769
======-----------------------------2019-08-02T22:58:24.769
ok:2019-08-02T22:58:24.924
ok:2019-08-02T22:58:25.803
ok:2019-08-02T22:58:26.473
ok:2019-08-02T22:58:25.947
ok:2019-08-02T22:58:25.891
ok:2019-08-02T22:58:25.859
ok:2019-08-02T22:58:25.457
ok:2019-08-02T22:58:26.443
ok:2019-08-02T22:58:25.457
ok:2019-08-02T22:58:26.157
ok:2019-08-02T22:58:25.003
ok:2019-08-02T22:58:24.979
ok:2019-08-02T22:58:25.698
ok:2019-08-02T22:58:25.084
ok:2019-08-02T22:58:25.102
ok:2019-08-02T22:58:26.083
ok:2019-08-02T22:58:26.377
ok:2019-08-02T22:58:25.669
ok:2019-08-02T22:58:26.360
ok:2019-08-02T22:58:26.640
ok:2019-08-02T22:58:26.321
ok:2019-08-02T22:58:26.087
ok:2019-08-02T22:58:26.226
ok:2019-08-02T22:58:24.833
ok:2019-08-02T22:58:26.736
ok:2019-08-02T22:58:25.497
ok:2019-08-02T22:58:25.374
ok:2019-08-02T22:58:26.377
ok:2019-08-02T22:58:26.764
ok:2019-08-02T22:58:24.889
ok:2019-08-02T22:58:26.419
ok:2019-08-02T22:58:25.174
ok:2019-08-02T22:58:25.447
ok:2019-08-02T22:58:24.957
ok:2019-08-02T22:58:24.817
ok:2019-08-02T22:58:24.809
ok:2019-08-02T22:58:26.764
ok:2019-08-02T22:58:26.035
ok:2019-08-02T22:58:25.855
ok:2019-08-02T22:58:26.310
ok:2019-08-02T22:58:26.412
ok:2019-08-02T22:58:26.210
ok:2019-08-02T22:58:25.569
ok:2019-08-02T22:58:25.039
ok:2019-08-02T22:58:25.846
ok:2019-08-02T22:58:26.328
ok:2019-08-02T22:58:24.802
ok:2019-08-02T22:58:25.970
ok:2019-08-02T22:58:25.970
ok:2019-08-02T22:58:25.475
ok:2019-08-02T22:58:26.147
ok:2019-08-02T22:58:25.937
ok:2019-08-02T22:58:26.525
ok:2019-08-02T22:58:25.527
ok:2019-08-02T22:58:24.871
ok:2019-08-02T22:58:26.246
ok:2019-08-02T22:58:24.786
ok:2019-08-02T22:58:25.484
ok:2019-08-02T22:58:25.871
ok:2019-08-02T22:58:25.240
ok:2019-08-02T22:58:24.899
ok:2019-08-02T22:58:24.889
ok:2019-08-02T22:58:25.559
ok:2019-08-02T22:58:24.856
ok:2019-08-02T22:58:24.783
ok:2019-08-02T22:58:25.257
ok:2019-08-02T22:58:26.394
ok:2019-08-02T22:58:26.471
ok:2019-08-02T22:58:25.957
ok:2019-08-02T22:58:25.930
ok:2019-08-02T22:58:25.316
ok:2019-08-02T22:58:25.323
ok:2019-08-02T22:58:26.381
ok:2019-08-02T22:58:26.552
ok:2019-08-02T22:58:26.577
ok:2019-08-02T22:58:25.369
ok:2019-08-02T22:58:26.157
ok:2019-08-02T22:58:25.937
ok:2019-08-02T22:58:26.030
ok:2019-08-02T22:58:26.693
ok:2019-08-02T22:58:24.982
ok:2019-08-02T22:58:25.511
ok:2019-08-02T22:58:25.042
ok:2019-08-02T22:58:26.307
ok:2019-08-02T22:58:25.769
ok:2019-08-02T22:58:25.710
ok:2019-08-02T22:58:26.699
ok:2019-08-02T22:58:26.047
ok:2019-08-02T22:58:26.056
ok:2019-08-02T22:58:24.822
ok:2019-08-02T22:58:26.204
ok:2019-08-02T22:58:24.803
ok:2019-08-02T22:58:26.257
ok:2019-08-02T22:58:25.701
ok:2019-08-02T22:58:24.964
ok:2019-08-02T22:58:25.678
ok:2019-08-02T22:58:24.858
ok:2019-08-02T22:58:25.741
ok:2019-08-02T22:58:26.153
ok:2019-08-02T22:58:26.023
2019-08-02T22:58:26.766:全部结束

可以看到 100个线程并发,同时并发,64-73毫秒之间 即 9毫秒

2、不使用CountDownLatch

    @Test
public void poolNoCountDownLatch() throws Exception {
int parrelnum=100;
List<Future<String>> futureList = new ArrayList<>();
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(parrelnum);
for (int i = 0; i < parrelnum; i++) {
Future<String> submit = fixedThreadPool.submit(() -> {
try {
System.out.println("======-----------------------------"+ LocalDateTime.now());
// System.out.println("======-----------------------------"+ LocalDateTime.now()
// +":"+Thread.currentThread().getName()
// +";守护线程:"+Thread.currentThread().isDaemon());
Thread.sleep(new Random().nextInt(2000));
} catch (InterruptedException e) {
e.printStackTrace();
}
return "ok:"+LocalDateTime.now();
});
futureList.add(submit);
}
fixedThreadPool.shutdown(); try {
System.out.println(LocalDateTime.now()+":"+"1秒后统一开始");
Thread.sleep(1000);
for (Future<String> future : futureList) {
System.out.println(future.get());
}
System.out.println(LocalDateTime.now()+":"+"全部结束");
} catch (InterruptedException e) {
e.printStackTrace();
}
}

可以看到 100个线程并发,同时并发,91-96毫秒之间 即 5毫秒

com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.github.bjlhx15.common.base.thread.spring.controller.ThreadPoolExecutorParrelTest,poolNoCountDownLatch
======-----------------------------2019-08-02T23:02:42.491
======-----------------------------2019-08-02T23:02:42.491
======-----------------------------2019-08-02T23:02:42.492
======-----------------------------2019-08-02T23:02:42.491
======-----------------------------2019-08-02T23:02:42.491
======-----------------------------2019-08-02T23:02:42.492
======-----------------------------2019-08-02T23:02:42.491
======-----------------------------2019-08-02T23:02:42.491
======-----------------------------2019-08-02T23:02:42.492
======-----------------------------2019-08-02T23:02:42.492
======-----------------------------2019-08-02T23:02:42.491
======-----------------------------2019-08-02T23:02:42.492
======-----------------------------2019-08-02T23:02:42.492
======-----------------------------2019-08-02T23:02:42.492
======-----------------------------2019-08-02T23:02:42.491
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.492
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.492
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.492
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.492
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.496
======-----------------------------2019-08-02T23:02:42.496
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.496
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.496
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.496
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.494
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.493
2019-08-02T23:02:42.493:1秒后统一开始
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.493
======-----------------------------2019-08-02T23:02:42.496
======-----------------------------2019-08-02T23:02:42.496
======-----------------------------2019-08-02T23:02:42.496
======-----------------------------2019-08-02T23:02:42.496
======-----------------------------2019-08-02T23:02:42.496
======-----------------------------2019-08-02T23:02:42.496
======-----------------------------2019-08-02T23:02:42.496
======-----------------------------2019-08-02T23:02:42.496
======-----------------------------2019-08-02T23:02:42.496
======-----------------------------2019-08-02T23:02:42.496
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
======-----------------------------2019-08-02T23:02:42.495
ok:2019-08-02T23:02:43.998
ok:2019-08-02T23:02:43.772
ok:2019-08-02T23:02:42.961
ok:2019-08-02T23:02:42.623
ok:2019-08-02T23:02:44.241
ok:2019-08-02T23:02:43.478
ok:2019-08-02T23:02:44.477
ok:2019-08-02T23:02:43.033
ok:2019-08-02T23:02:43.533
ok:2019-08-02T23:02:44.004
ok:2019-08-02T23:02:42.856
ok:2019-08-02T23:02:44.217
ok:2019-08-02T23:02:44.190
ok:2019-08-02T23:02:44.011
ok:2019-08-02T23:02:42.603
ok:2019-08-02T23:02:44.448
ok:2019-08-02T23:02:44.017
ok:2019-08-02T23:02:42.833
ok:2019-08-02T23:02:42.808
ok:2019-08-02T23:02:44.479
ok:2019-08-02T23:02:43.207
ok:2019-08-02T23:02:44.190
ok:2019-08-02T23:02:42.677
ok:2019-08-02T23:02:43.624
ok:2019-08-02T23:02:42.848
ok:2019-08-02T23:02:44.161
ok:2019-08-02T23:02:43.904
ok:2019-08-02T23:02:44.439
ok:2019-08-02T23:02:44.361
ok:2019-08-02T23:02:43.598
ok:2019-08-02T23:02:43.777
ok:2019-08-02T23:02:43.153
ok:2019-08-02T23:02:42.922
ok:2019-08-02T23:02:43.466
ok:2019-08-02T23:02:43.689
ok:2019-08-02T23:02:43.881
ok:2019-08-02T23:02:42.784
ok:2019-08-02T23:02:43.598
ok:2019-08-02T23:02:42.691
ok:2019-08-02T23:02:43.671
ok:2019-08-02T23:02:43.920
ok:2019-08-02T23:02:43.833
ok:2019-08-02T23:02:44.415
ok:2019-08-02T23:02:43.019
ok:2019-08-02T23:02:44.244
ok:2019-08-02T23:02:42.963
ok:2019-08-02T23:02:44.361
ok:2019-08-02T23:02:43.689
ok:2019-08-02T23:02:43.620
ok:2019-08-02T23:02:42.753
ok:2019-08-02T23:02:43.055
ok:2019-08-02T23:02:43.259
ok:2019-08-02T23:02:43.837
ok:2019-08-02T23:02:44.233
ok:2019-08-02T23:02:43.483
ok:2019-08-02T23:02:42.753
ok:2019-08-02T23:02:43.823
ok:2019-08-02T23:02:44.448
ok:2019-08-02T23:02:44.361
ok:2019-08-02T23:02:43.727
ok:2019-08-02T23:02:42.641
ok:2019-08-02T23:02:43.648
ok:2019-08-02T23:02:43.282
ok:2019-08-02T23:02:42.522
ok:2019-08-02T23:02:44.394
ok:2019-08-02T23:02:43.037
ok:2019-08-02T23:02:44.366
ok:2019-08-02T23:02:44.093
ok:2019-08-02T23:02:43.494
ok:2019-08-02T23:02:44.120
ok:2019-08-02T23:02:44.283
ok:2019-08-02T23:02:43.917
ok:2019-08-02T23:02:44.093
ok:2019-08-02T23:02:43.524
ok:2019-08-02T23:02:42.593
ok:2019-08-02T23:02:43.628
ok:2019-08-02T23:02:42.544
ok:2019-08-02T23:02:43.279
ok:2019-08-02T23:02:44.182
ok:2019-08-02T23:02:42.878
ok:2019-08-02T23:02:44.177
ok:2019-08-02T23:02:43.371
ok:2019-08-02T23:02:42.538
ok:2019-08-02T23:02:43.783
ok:2019-08-02T23:02:43.515
ok:2019-08-02T23:02:43.616
ok:2019-08-02T23:02:43.241
ok:2019-08-02T23:02:43.366
ok:2019-08-02T23:02:42.731
ok:2019-08-02T23:02:43.844
ok:2019-08-02T23:02:43.423
ok:2019-08-02T23:02:43.698
ok:2019-08-02T23:02:43.689
ok:2019-08-02T23:02:43.733
ok:2019-08-02T23:02:43.459
ok:2019-08-02T23:02:43.546
ok:2019-08-02T23:02:44.067
ok:2019-08-02T23:02:44.494
ok:2019-08-02T23:02:44.054
ok:2019-08-02T23:02:43.923
2019-08-02T23:02:44.495:全部结束 Process finished with exit code 0

3、小结

故针对上述一次并发不推荐使用CountDownLatch增加程序复杂度

1.2、循环并发

如,15个线程,每5个一组循环并发测试

    @Test
public void poolCyclicBarrier() throws Exception {
int parrelnum = 5;
//所有线程阻塞,然后统一开始
CyclicBarrier cyclicBarrier = new CyclicBarrier(parrelnum);
List<Future<String>> futureList = new ArrayList<>();
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(parrelnum);
for (int i = 0; i < 15; i++) {
Future<String> submit = fixedThreadPool.submit(() -> {
try {
Thread.sleep(new Random().nextInt(2000));
//begin 阻塞所有线程
cyclicBarrier.await();
System.out.println("======-----------------------------并发:" + LocalDateTime.now());
Thread.sleep(new Random().nextInt(2000));
System.out.println("======-----------------------------" + LocalDateTime.now()
+ ":" + Thread.currentThread().getName()
+ ";守护线程:" + Thread.currentThread().isDaemon());
} catch (InterruptedException e) {
e.printStackTrace();
}
return "ok:" + LocalDateTime.now();
});
futureList.add(submit);
} for (Future<String> future : futureList) {
future.get();
// System.out.println(future.get());
}
}

输出

======-----------------------------并发:2019-08-06T21:11:21.970
======-----------------------------并发:2019-08-06T21:11:21.970
======-----------------------------并发:2019-08-06T21:11:21.970
======-----------------------------并发:2019-08-06T21:11:21.970
======-----------------------------并发:2019-08-06T21:11:21.970
======-----------------------------2019-08-06T21:11:22.488:pool-1-thread-2;守护线程:false
======-----------------------------2019-08-06T21:11:22.610:pool-1-thread-1;守护线程:false
======-----------------------------2019-08-06T21:11:22.635:pool-1-thread-4;守护线程:false
======-----------------------------2019-08-06T21:11:23.222:pool-1-thread-5;守护线程:false
======-----------------------------2019-08-06T21:11:23.807:pool-1-thread-3;守护线程:false
======-----------------------------并发:2019-08-06T21:11:25.161
======-----------------------------并发:2019-08-06T21:11:25.161
======-----------------------------并发:2019-08-06T21:11:25.161
======-----------------------------并发:2019-08-06T21:11:25.161
======-----------------------------并发:2019-08-06T21:11:25.161
======-----------------------------2019-08-06T21:11:26.123:pool-1-thread-2;守护线程:false
======-----------------------------2019-08-06T21:11:26.183:pool-1-thread-4;守护线程:false
======-----------------------------2019-08-06T21:11:26.295:pool-1-thread-3;守护线程:false
======-----------------------------2019-08-06T21:11:26.701:pool-1-thread-5;守护线程:false
======-----------------------------2019-08-06T21:11:27.016:pool-1-thread-1;守护线程:false
======-----------------------------并发:2019-08-06T21:11:28.752
======-----------------------------并发:2019-08-06T21:11:28.752
======-----------------------------并发:2019-08-06T21:11:28.752
======-----------------------------并发:2019-08-06T21:11:28.752
======-----------------------------并发:2019-08-06T21:11:28.752
======-----------------------------2019-08-06T21:11:28.983:pool-1-thread-3;守护线程:false
======-----------------------------2019-08-06T21:11:29.548:pool-1-thread-5;守护线程:false
======-----------------------------2019-08-06T21:11:29.668:pool-1-thread-1;守护线程:false
======-----------------------------2019-08-06T21:11:29.827:pool-1-thread-2;守护线程:false
======-----------------------------2019-08-06T21:11:29.868:pool-1-thread-4;守护线程:false

二、

006-多线程-JUC线程池-并发测试程序的更多相关文章

  1. java多线程系类:JUC线程池:02之线程池原理(一)

    在上一章"Java多线程系列--"JUC线程池"01之 线程池架构"中,我们了解了线程池的架构.线程池的实现类是ThreadPoolExecutor类.本章,我 ...

  2. Java多线程系列--“JUC线程池”02之 线程池原理(一)

    概要 在上一章"Java多线程系列--“JUC线程池”01之 线程池架构"中,我们了解了线程池的架构.线程池的实现类是ThreadPoolExecutor类.本章,我们通过分析Th ...

  3. java多线程系类:JUC线程池:03之线程池原理(二)(转)

    概要 在前面一章"Java多线程系列--"JUC线程池"02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包 ...

  4. Java多线程系列--“JUC线程池”06之 Callable和Future

    概要 本章介绍线程池中的Callable和Future.Callable 和 Future 简介示例和源码分析(基于JDK1.7.0_40) 转载请注明出处:http://www.cnblogs.co ...

  5. Java多线程系列--“JUC线程池”03之 线程池原理(二)

    概要 在前面一章"Java多线程系列--“JUC线程池”02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包括:线程池示例参考代 ...

  6. Java多线程系列--“JUC线程池”04之 线程池原理(三)

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3509960.html 本章介绍线程池的生命周期.在"Java多线程系列--“基础篇”01之 基 ...

  7. Java多线程系列--“JUC线程池”05之 线程池原理(四)

    概要 本章介绍线程池的拒绝策略.内容包括:拒绝策略介绍拒绝策略对比和示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3512947.html 拒绝策略 ...

  8. Java - "JUC线程池" 架构

    Java多线程系列--“JUC线程池”01之 线程池架构 概要 前面分别介绍了"Java多线程基础"."JUC原子类"和"JUC锁".本章介 ...

  9. Java - "JUC线程池" ThreadPoolExecutor原理解析

    Java多线程系列--“JUC线程池”02之 线程池原理(一) ThreadPoolExecutor简介 ThreadPoolExecutor是线程池类.对于线程池,可以通俗的将它理解为"存 ...

随机推荐

  1. linux系统编程综合练习-实现一个小型的shell程序(四)

    上节中已经对后台作业进行了简单处理,基本上要实现的功能已经完了,下面回过头来,对代码进行一个调整,把写得不好的地方梳理一下,给代码加入适当的注释,这种习惯其实是比较好了,由于在开发的时候时间都比较紧, ...

  2. docker的入门到放弃--docker基本命令

    docker的镜像中国:https://www.docker-cn.com/registry-mirror 1.搜索镜像 [root@localhost ~]# docker search tomca ...

  3. CH6801 棋盘覆盖

    6801 棋盘覆盖 0x60「图论」例题 描述 给定一个N行N列的棋盘,已知某些格子禁止放置.求最多能往棋盘上放多少块的长度为2.宽度为1的骨牌,骨牌的边界与格线重合(骨牌占用两个格子),并且任意两张 ...

  4. C# URL编码转换 URL转码 UrlDecode UrlEncode

    using System.Web; 引用system.web. textBox2.Text = System.Web.HttpUtility.UrlDecode(textBox1.Text, Syst ...

  5. 使用Optional优雅处理null

    先假设一个场景.如下所示 public class Person { private String name; public Person() { } public Person(String nam ...

  6. cube.js 学习(八)backend部署模式

    cube.js 从设计上就进行了系统上的分层,backend,frontend,backend 是cube.js 的核心 对于cube.js backend 的部署官方也提供了好多中方法 部署模型 s ...

  7. 9.11 myl模拟赛

    9.11 myl 模拟赛 100 + 100 + 0 第一题耗费了太多的时间,导致最后一题没有时间想,直接去写了暴力,而且出题人没有给暴力分.... Problem 1. superman [题目描述 ...

  8. pcl-qt使用QVTKWidget 与PCLVisualizer 显示雷达点云

    #ifndef PCLVIEWER_H #define PCLVIEWER_H #include "defines.h" #include <iostream> #in ...

  9. CODE FESTIVAL 2016 qual B题解

    传送门 \(A\) 什么玩意儿-- const char t[]={"0CODEFESTIVAL2016"}; char s[25];int res; int main(){ sc ...

  10. Three.js中的div标签跟随(模型弹框)

    目录 Three.js中的div标签跟随(模型弹框) 参考官方案例 核心渲染器 用法 注意事项 Three.js中的div标签跟随(模型弹框) 参考官方案例 核心渲染器 three.js-master ...