1.并发编程中的锁
并发编程中的各种锁
java高并发锁的3种实现
Java并发机制及锁的实现原理
2.线程池核心线程数一般定义多少,为什么?
CPU密集型任务: 尽量使用较小的线程池,一般为CPU核心数+1。 因为CPU密集型任务使得CPU使用率很高,若开过多的线程数,只能增加上下文切换的次数,因此会带来额外的开销。
IO密集型任务: 可以使用稍大的线程池,一般为2*CPU核心数。 IO密集型任务CPU使用率并不高,因此可以让CPU在等待IO的时候去处理别的任务,充分利用CPU时间。
参考:别再说你不懂线程池——做个优雅的攻城狮
3.自增线程安全的int
AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。
参考: int变量操作与线程安全