一、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. 《你又怎么了我错了行了吧》【Beta】Scrum meeting 3

    第三天 日期:2019/6/26 前言: 第3次会议在女生宿舍召开(前一天晚上开的) 项目全部基本测试完成,解决了多处bug,明天终于可以拿去演示了.... 1.1 今日完成任务情况.成员贡献时间及工 ...

  2. myeclipse常用快捷键和小技巧

    常用快捷键: Ctrl + Shift + R 在整个项目中查找文件 Ctrl + H 查找文件,可以限定文件中包含的内容 Ctrl + Shift + G 查找一个方法在哪里被调用 Ctrl + O ...

  3. 简述 OSI 七层协议?

    OSI七层协议是一个用于计算机或通信系统间互联的标准体系. 物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0. 数据链路层的功能:定义了电信号的分组方式按照以太 ...

  4. char[] byte[] string

    C#  byte 和 char 可以认为是等价的.但是在文本显示的时候有差异. char 占两个字节,unicode字符 1.内存转换: char转化为byte: public static byte ...

  5. HDU6072 Logical Chain

    题意:动态修改图 \(G\) 的边集,求每次修改后的 \(\sum c\times (c−1) / 2\) (记每个强连通分量中的点数量为 \(c\) ).其中修改操作共 \(m\) 次,每次最多改 ...

  6. C# 异步的简单用法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. postgresql分布式集群之citus简介(转载)

    一.Citus是什么 citus是PG的一个sharding插件,可以把PG变成一个分布式数据库.目前在苏宁有大量的生产应用跑在citus+pg的环境中.大家可以看it大咖视频. citus是一款基于 ...

  8. IIS相关的常见报错

    1.错误消息 401.3: 无权限 您无权使用您提供的凭据查看此目录或页(由于访问控制列表而导致访问被拒绝).请让 Web 服务器的管理员授予您访问“E:\IIS_Deploy\WebServices ...

  9. PHP实现系统编程(一) --- 网络Socket及IO多路复用【网摘】

    一直以来,PHP很少用于socket编程,毕竟是一门脚本语言,效率会成为很大的瓶颈,但是不能说PHP就无法用于socket编程,也不能说PHP的socket编程性能就有多么的低,例如知名的一款PHP ...

  10. (28)打鸡儿教你Vue.js

    单件商品金额计算和单选全选功能 new Vue({ el: '#app', data: { totalMoney: 0, productList: [] }, filters: { formatMon ...