1.串行与并发;进程和线程
串行:当有多个任务需要执行的时候,多个任务之间是按照一定的顺序执行的。
并发:多个任务同时执行。
程序中串行和并发是同时存在的。
进程和线程都是为了实现并发而存在的,
2.创建线程的方式及实现
4.说说 CountDownLatch、CyclicBarrier 原理和区别
CountDownLatch 是计数器, 线程完成一个就记一个, 就像 报数一样, 只不过是递减的.
而CyclicBarrier更像一个水闸, 线程执行就想水流, 在水闸处都会堵住, 等到水满(线程到齐)了, 才开始泄流.
CyclicBarrier 和 CountDownLatch都能解决 同时启动多个线程 的需求
7.ThreadLocal 原理分析,ThreadLocal为什么会出现OOM,出现的深层次原理
ThreadLocal 用来保存线程独享的数据
8.讲讲线程池的实现原理
9.线程池的几种实现方式
10.线程的生命周期,状态是如何转移的 可参考:《Java多线程编程核心技术》
11.说说线程安全问题,什么是线程安全,如何保证线程安全
12.线程安全
就是多线程访问同一代码,不会产生不确定结果。(比如死锁)
13.如何避免死锁
1. 控制加锁的顺序
2.设置加锁超时时间
14.使用synchronized同步代码块,或者用Lock锁
15.多线程并发情况下,线程共享的变量改为方法局部级变量
16.产生死锁的四个条件(互斥、请求与保持、不剥夺、循环等待)
两个或两个以上的线程,同时访问相同的资源,互相持有对方需要访问的实例,处于互相等待对方释放的状态下会发生死锁。
17.如何检查死锁(通过jConsole检查死锁)
19.volatile 实现原理(禁止指令重排、刷新内存)
20.synchronized 实现原理(对象监视器)
21.synchronized 与 lock 的区别
synchronized 是一个关键字,会自动释放锁
lock是一个类,它提供了更多的方法,可以处理一些异常情况,比如说设定加锁超时时间,读取文件不冲突情况下可以一异步,而写文件时加锁同步。
需要主动去释放锁,不然会出现死锁
27.Java 8并法包下常见的并发类
28.设计5个线程,让这5个线程同时启动, 说一下思路
29.设计4个线程,两个线程向集合A中添加数据,另外两个线程从集合A中移除数据,手写代码( 遇到两次笔试 )
30.讲讲ThreadLocal的实现原理;作为变量的线程隔离方式,其内部是和做的?
31.讲讲独占锁ReetrantLock 原理
32.读写锁 ReetrantReadWriteLock原理?