Java多线程八股文背诵版v0.2

简述java内存模型(JMM)

java内存模型定义了程序中各种变量的访问规则。其规定所有变量都存储在主内存,线程均有自己的工作内存。工作内存中保存被该线程使用的变量的主内存副本,线程对变量的所有操作都必须在工作空间进行,不能直接读写主内存数据。操作完成后,线程的工作内存通过缓存一致性协议将操作完的数据刷回主存。

简述as-if-serial

编译器等会对原始的程序进行指令重排序和优化。但不管怎么重排序,其结果和用户原始程序输出预定结果一致。

简述happens-before八大原则

程序次序规则:一个线程内写在前面的操作先行发生于后面的。

锁定规则:unlock 操作先行发生于后面对同一个锁的 lock 操作。

volatile 规则:对 volatile 变量的写操作先行发生于后面的读操作。

线程启动规则:线程的 start 方法先行发生于线程的每个动作。

线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生。

线程终止规则:线程中所有操作先行发生于对线程的终止检测。

对象终结规则:对象的初始化先行发生于 finalize 方法。

传递性规则:如果操作 A 先行发生于操作 B,操作 B 先行发生于操作 C,那么操作 A 先行发生于操作 C

as-if-serial 和 happens-before 的区别

as-if-serial 保证单线程程序的执行结果不变,happens-before 保证正确同步的多线程程序的执行结果不变。

简述原子性操作

一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行,这就是原子性操作。

简述线程的可见性

可见性指当一个线程修改了共享变量时,其他线程能够立即得知修改。volatile,synchronized,final都能保证可见性。

简述有序性

即虽然多线程存在并发和指令优化等操作,在本线程内观察该线程的所有执行操作是有序的。

简述java中volatile关键字作用

  1. 保证变量对所有线程的可见性。当一条线程修改了变量值,新值对于其他线程来说是立即可以得知的。

  2. 禁止指令重排序优化。使用 volatile 变量进行写操作,汇编指令带有 lock 前缀,相当于一个内存屏障,编译器不会将后面的指令重排到内存屏障之前。

java线程的实现方式

  1. 实现Runnable接口

  2. 继承Thread类。

  3. 实现Callable接口

简述java线程的状态

线程状态有New, RUNNABLE, BLOCK, WAITING, TIMED_WAITING, THERMINATED NEW:新建状态,线程被创建且未启动,此时还未调用 start 方法。

RUNNABLE: 运行状态。其表示线程正在JVM中执行,但是这个执行,不一定真的在跑,也可能在排队等CPU。

BLOCKED:阻塞状态。线程等待获取锁,锁还没获得。

WAITING: 等待状态。线程内run方法运行完语句Object.wait()/Thread.join()进入该状态。

TIMED_WAITING:限期等待。在一定时间之后跳出状态。调用Thread.sleep(long) Object.wait(long) Thread.join(long)进入状态。其中这些参数代表等待的时间。

TERMINATED:结束状态。线程调用完run方法进入该状态。

简述线程通信的方式

  1. volatile 关键词修饰变量,保证所有线程对变量访问的可见性。

  2. synchronized关键词。确保多个线程在同一时刻只能有一个处于方法或同步块中。

  3. wait/notify方法

  4. IO通信

简述线程池

没有线程池的情况下,多次创建,销毁线程开销比较大。如果在开辟的线程执行完当前任务后执行接下来任务,复用已创建的线程,降低开销、控制最大并发数。

线程池创建线程时,会将线程封装成工作线程 Worker,Worker 在执行完任务后还会循环获取工作队列中的任务来执行。

将任务派发给线程池时,会出现以下几种情况

  1. 核心线程池未满,创建一个新的线程执行任务。

  2. 如果核心线程池已满,工作队列未满,将线程存储在工作队列。

  3. 如果工作队列已满,线程数小于最大线程数就创建一个新线程处理任务。

  4. 如果超过大小线程数,按照拒绝策略来处理任务。

线程池参数

  1. corePoolSize:常驻核心线程数。超过该值后如果线程空闲会被销毁。

  2. maximumPoolSize:线程池能够容纳同时执行的线程最大数。

  3. keepAliveTime:线程空闲时间,线程空闲时间达到该值后会被销毁,直到只剩下 corePoolSiz

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值