随笔分类 - java多线程
摘要:简述 Fork/Join 是 JDK 1.7 加入的新的线程池实现,它体现的是一种分治思想,适用于能够进行任务拆分的 cpu 密集型运算Fork/Join 在分治的基础上加入了多线程,可以把每个任务的分解和合并交给不同的线程来完成,进一步提升了运算效率Fork/Join 默认会创建与 cpu 核心数
阅读全文
摘要:简述 tomcat分为两部分,connector和container。connector部分组成如下: LimitLatch 用来限流,可以控制最大连接个数 Acceptor 只负责【接收新的 socket 连接】 Poller 只负责监听 socket channel 是否有【可读的 I/O 事件
阅读全文
摘要:简述 ThreadPoolExecutor是java线程池的一种 底层 ThreadPoolExecutor 使用 int 的变量ctl的高 3 位来表示线程池状态,低29位表示线程数量 这些信息存储在一个原子变量 ctl 中,目的是将线程池状态与线程个数合二为一,这样就可以用一次 cas 原子操作
阅读全文
摘要:简述 面试中常常被问到多线程交替输出数字或字母序列的问题,例如AB两个线程交替输出1到100。三个线程交替输出abcabcabc...等 wait notify实现3线程交替输出abc 我们首先抽象出一个用于打印字母的类: package ThreadTest.testOut; public cla
阅读全文
摘要:简述 ReentrantLock是juc包下的一个类,它是一个可重入且独占式的锁,它具有与使用synchronized监视器锁相同的基本行为和语义,但与synchronized关键字相比,它更灵活、更强大,增加了轮询、超时、中断等高级功能。 ReenreantLock可以中断——a线程用着锁,b线程
阅读全文
摘要:简述 他们都是LockSupport,park用于暂停某个线程,unpark用于恢复某个线程的运行。 @slf4j public class Test { public static void main(String[] args) { Thread t1 = new Thread(() -> {
阅读全文
摘要:简述 join方法的主要作用就是同步,它可以使得线程之间的并行执行变为串行执行。在A线程中调用了B线程的join()方法时,表示只有当B线程执行完毕时,A线程才能继续执行。 底层 首先我们需要知道join方法底层是用wait方法实现的,所以join方法也会释放锁。 wait方法机制 这里在介绍底层前
阅读全文
摘要:简述 interrupt方法用于打断sleep,wait,join的线程,interrupt不会真的中断线程,它的本质只是设置一个中断状态,让该被打断线程决定如何结束。 阻塞状态 当线程处于sleep,wait,join等阻塞状态时,interrupt方法会清空打断状态,并抛出Interrupted
阅读全文
摘要:sleep 1. 调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞) 2. 其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException 3. 睡眠结束后的线程未必会立刻得到执行 4
阅读全文
摘要:简述 还没想好写什么 进程 进程是一个程序的执行过程,这是一个动态的概念。 进程是操作系统中竞争计算机系统资源的基本单位。 线程 线程是进程调度的单位,是进程的一个执行路径。 线程是CPU独立运行和独立调度的基本单位。 一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。 Java
阅读全文