http://www.importnew.com/12773.html
http://www.cnblogs.com/fingerboy/p/5352880.html
https://blog.csdn.net/ll666634/article/details/78615505
https://blog.csdn.net/qq_39627461/article/details/79796020
线程计数器CountDownLatch和循环屏障CyclicBarrier
CyclicBarrier和CountDownLatch的区别
7. 怎么唤醒一个阻塞的线程?
如果线程是因为调用了wait()、sleep()或者join()方法而导致的阻塞,可以中断线程,并且通过抛出InterruptedException来唤醒它;如果线程遇到了IO阻塞,无能为力,因为IO是操作系统实现的,Java代码并没有办法直接接触到操作系统。
11.ThreadLocal的作用是什么?
1)ThreadLocal用来解决多线程程序的并发问题
2)ThreadLocal并不是一个Thread,而是Thread的局部变量,当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本.
3)从线程的角度看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达的意思。
4)线程局部变量并不是Java的新发明,Java没有提供在语言级支持(语法上),而是变相地通过ThreadLocal的类提供支持.