摘要:
1、GC 日志输出 JVM 的参数配置其实变化也很大。就拿 GC 日志这一块来说,Java 9 几乎是推翻重来。 这个时候,再去看 jstat 已经来不及了,我们需要保留现场。 那在实践中,要怎么用呢?请看下面命令行。 Java 8 -verbose:gc -XX:+PrintGCDetails - 阅读全文
摘要:
AQS 内部原理解析 我们对 AQS 进行内部原理解析的话需要抓住重点,因为 AQS 的内部比较复杂,代码很长而且非常不容易读懂,如果我们一上来就一头扎进去读源码,是很难完全掌握它的。 所以在本课时中,我们把 AQS 最核心的三个部分作为重点提炼出来,由这三个部分作为切入点,打开 AQS 的大门。 阅读全文
摘要:
你可能经常在面试中被问到这两个问题。合适的线程数量是多少?CPU 核心数和线程数的关系? 我们调整线程池中的线程数量的最主要的目的是为了充分并合理地使用 CPU 和内存等资源,从而最大限度地提高程序的性能。 在实际工作中,我们需要根据任务类型的不同选择对应的策略。 CPU 密集型任务 首先,我们来看 阅读全文
摘要:
1、常见的 6 种线程池 6 种常见的线程池如下。 FixedThreadPool CachedThreadPool ScheduledThreadPool SingleThreadExecutor SingleThreadScheduledExecutor ForkJoinPool FixedTh 阅读全文
摘要:
拒绝时机 首先,新建线程池时可以指定它的任务拒绝策略,例如: newThreadPoolExecutor( 5, 10, 5, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), new ThreadPoolExecutor.DiscardOldestPol 阅读全文
摘要:
package com.mzj.thread.interrupt; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; /** * 用 “volatile 标记位的停止方 阅读全文