温故知新-并发编程篇

01 Mind Map

温故知新-并发编程篇

02 Question&Answer

Q1: 线程创建方式?
A: 分为“有返回结果”(3种)和“无返回结果”


Q2: 线程分类?
A: 两种,哪两种?有什么特性?


Q3: 线程运行状态?
A: 5个流程,分别对应代码那一部分?


Q4: 线程优先级?
A: 两个方法的特点、设置优先级的范围


Q5: 如何让3个线程按顺序执行?
A: 使用join方法,考虑具体如何实现?


Q6: 如何让3个线程按顺序执行?
A: 使用join方法,考虑具体如何实现?


Q7: 线程安全的解决方案?
A: 两种,考虑分别怎么使用


Q8: 线程安全的解决方案的原理?
A: ?


Q9: 多线程死锁举例?
A: ?


Q10: ThreadLocal的含义及实现原理?
A: ?


Q11: volatile的特性以及与Synchronized区别?
A: 3个特性(可见性、禁止重排序、性能),区别:原子性和性能(volatile不能保证原子性)


Q12: 重排序在单线程与多线程中的区别?
A: 遵循的语义以及对结果是否改变这两方面考虑


Q13: JMM含义?
A: 从共享变量和私有变量考虑


Q14: 多线程通讯?
A: notify/notifyall 、wait、Lock、Condition,举例:设置姓名与性别”?


Q15: sleep和wait的区别?
A: 从是否释放锁考虑


Q16: 并发包里的3个类的特点、对应的代码?
A: CountDownLatch(计数器)、CyclicBarrier(屏障)、Semaphore(计数信号量)


Q17: 并发包里的非阻塞队列(ConcurrentLinkedDeque)和阻塞队列(BlockingQueue)特性?
A:从适用场景、遵循原则考虑


Q18: 通过阻塞队列LinkedBlockingQueue来模拟生产者和消费者?
A:offer与poll方法


Q19: 线程池的5个分类?
A:newCahcedThreadPool(可复用线程的线程池)、newFixedThreadPool(定长线程池)、newSingleThreadExecutor(单个worker线程线程池)、newScheduleThreadPool(指定时间或延后执行的线程池)、newSingleThreadScheduledExecutor(单线程+定时执行执行线程池)


Q20: 线程池流程原理?
A:提交线程 -> 核心线程数 -> 缓存队列 ->最大线程数 ->拒绝或创建并执行任务。


Q21: 如何合理配置线程池?
A:线程等待时间越长,需要越多线程。线程CPU时间越高,需要越少线程。


Q22: 什么是重入锁,案例?
A:内置锁与显示锁这方面考虑


Q23: 乐观锁与悲观锁含义及应用场景?
A:数据库、version,是否操作。。。。。


Q24: 什么是CAS无锁及案例?
A:CAS(V,E,N)分表表示什么,底层流程如何操作?


Q25: 什么是自旋锁?
A:线程竞争不激烈,并且波爱吃锁的时间段,则推荐使用自旋锁?


Q26: 分布式锁有哪些,各自原理是什么?
A:举例?


Q27: 原子类的特性?
A:举例?AtomicInteger,CAS操作线程安全,高伸缩性


Q28: Disruptor框架?
A:一种高效的“生产者-消费者”模式,使用队列(一种环形RingBuffer)实现,底层是数组。

02 New Insights

Q: 什么情况下使用volatile?
A:volatile什么时候使用?什么时候,线程内存数据跟主内存数据进行交换、更新。