JAVA面试:第二章多线程 (未完结)

线程池的原理,运行顺序,java队列原理,几个方法有啥区别(arrayblockingqueue和linkednlockqueue,首尾,锁,多少个锁)

线程池的错误怎么排查(阿里规范里有,不能用原生的ThreadPoolExecutor,要重写线程池,过程和几个重要的点)

  • 如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者“过度切换”的问题。

线程池的优势:

  • 线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。
  • 线程池不仅能够保证内核的充分利用,还能防止过分调度。
  • 可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。

阿里巴巴规范:

  • 线程池不允许使用Executors创建,而是通过ThreadPoolExecutor的方式,这样可以明确的运行规则,规避资源耗尽的风险

  • newFixedThreadPool和newSingleThreadExecutor 的弊端:
    
都是无界队列,允许的队列长度都是Integer.MAX_VALUE, 请求可能大量堆积,最后造成JVM的OOM内存溢出
  • newCachedThreadPool 的弊端:
允许的创建线程数量为Integer.MAX_VALUE, 可能创建出大量线程,最后造成JVM的OOM内存溢出

synchronized的原理,锁如何升级的

juc的lock实现原理

juc的并发工具类(AutomicInteger,CountDownLatch,CyclicBarrier,Condition,Semaphore)

原文地址:https://www.cnblogs.com/JMrLi/p/13935893.html