最后
针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。
最新整理面试题
上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题
最新整理电子书
最新整理大厂面试文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
状态描述:初始状态、运行状态、阻塞状态、等待状态、超时等待状态、终止状态。
4、执行机制
JVM中一个应用是可以有多个线程并行执行,线程被一对一映射为服务所在操作系统线程,调度在可用的CPU上执行,启动时会创建一个操作系统线程;当该线程终止时,这个操作系统线程也会被回收。
5、内存模型
在虚拟机启动运行时,会创建多个线程,数据区中有的模块是线程共享的,有的是线程私有的:
线程共享:元数据区、堆Heap;
线程私有:虚拟机栈、本地方法栈、程序计数器;
单个CPU在特定时刻只能执行一个线程,所以多线程通过几块空间的使用,然后不断的争抢CPU的执行时间段。
三、常见概念
======
1、线程优先级
线程调度器倾向执行线程优先级高的线程,线程优先级高说明获取CPU资源的概率高,或者获取的执行时间分片多,被执行的概率高但不代表优先级低的一定最后执行。
2、守护线程
守护线程是支持辅助型线程,主要在程序中起到调度和支持性作用,当Jvm中非守护线程全部结束,守护线程也就会结束。
3、线程加入
线程A中,执行线程B的加入方法,那么A线程就会等待线程B执行完毕再返回继续执行。
4、本地线程
ThreadLocal也叫做线程本地变量,为变量在每个线程中的创建副本,每个线程可以访问自己内部的副本变量,线程之间互不相互影响。
推荐观看:传送门
=======================================================
四、线程安全
======
在上图线程与内存空间的占用方式看,在线程访问共享内存块时,保证线程安全就很有必要。
1、同步控制
Synchronized关键字同步控制,可以修饰方法,修饰代码块,修饰静态方法等,同步控制的资源少,可以提高多线程效率。
2、加锁机制
Lock接口:Java并发编程中资源加锁的根接口之一,规定了资源锁使用的几个基础方法。
ReentrantLock类:实现Lock接口的可重入锁,即线程如果获得当前实例的锁,并进入任务方法,在线程没有释放锁的状态下,可以再次进入任务方法,特点:互斥排它性,即同一个时刻只有一个线程进入任务。
Condition接口:描述可能会与锁有关联的条件变量,提供了更强大的功能,例如在线程的等待/通知机制上,Conditon可以实现多路通知和选择性通知。
3、Volatile关键字
volatile修饰成员变量,不能修饰方法,即标识该线程在访问这个变量时需要从共享内存中获取,对该变量的修改,也需要同步刷新到共享内存中,保证了变量对所有线程的可见性。
五、线程通信
======
线程是个独立的个体,但是在线程执行过程中,如果处理同一个业务逻辑,可能会产生资源争抢,导致并发问题,甚至死锁现象,线程之间协调工作,就需要通信机制来保障。
1、基础方法
相关方法是Java中Object层级的基础方法,任何对象都有该方法:notify()随机通知一个在该对象上等待的线程,使其结束wait状态返回;wait()线程进入waiting等待状态,不会争抢锁对象,也可以设置等待时间;
2、等待/通知机制
等待/通知机制,该模式下指线程A在不满足任务执行的情况下调用对象wait()方法进入等待状态,线程B修改了线程A的执行条件,并调用对象notify()或者notifyAll()方法,线程A收到通知后从wait状态返回,进而执行后续操作。两个线程通过基于对象提供的wait()/notify()/notifyAll()等方法完成等待和通知间交互,提高程序的可伸缩性。
3、管道流通信
管道流主要用于在不同线程间直接传送数据,一个线程发送数据到输出管道,另一个线程从输入管道中读取数据,进而实现不同线程间的通信。
六、线程池
=====
1、Executor接口
Executor系统中,将线程任务提交和任务执行进行了解耦的设计,Executor有各种功能强大的实现类,提供便捷方式来提交任务并且获取任务执行结果,封装了任务执行的过程,不再需要Thread().start()方式,显式创建线程并关联执行任务。
2、核心参数
3、相关API类
Java核心架构进阶知识点
面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的
内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补
以上截图自行脑补