前言:文章中只罗列出知识点问题,并不提供对应的答案,仅仅作为检验自己是否对某个知识点存在空缺或遗忘,答案请自行Google;
Java多线程入门级书籍推荐:《Java多线程编程核心技术》
2018年3月4日记录:
一.简述 volatile 关键字
- a.内存屏障
- b.使用 volatile 关键字的场景
二.简述Java内存模型(非Java虚拟机内存模型)
- a.volatile关键字
- b.原子性(注意在64位下的long和double)、可见性、有序性
- c.happens-before原则(先行发生原则)
三.Java中的同步容器(非并发容器)和缺陷
- a.同步容器主要包括两类
- b.缺陷:性能、异常
四.CopyOnWriteArrayList的实现原理
- a.读/写
- b.性能缺陷
- c.优点
五.Java 中堆和栈有什么不同(以线程的方向来回答)
六.Java 中的死锁、饥饿、活锁
- a.死锁与活锁的区别
- b.如何避免活锁
七.线程池!!!
- a.什么是线程池
- b.使用线程池的好处
- c.线程池的工作原理
- d.Executor接口/ExecutorService接口/AbstractExecutorService 抽象类
- e.Executors类
- f.ThreadPoolExecutor类,构造参数,BlockingQueue的类型、RejectedExecutionHandler处理失败任务的四种策略
- g.execute和submit的区别
- h.shutdown()和shutdownNow()的区别
- i.线程池的注意事项
- j.简单线程池的设计
- k.如何合理的配置 java 线程池?如 CPU 密集型的任务,基本线程池
应该配置多大?IO 密集型的任务,基本线程池应该配置多大?用有界
队列好还是无界队列好?任务非常多的时候,使用什么阻塞队列能获取
最好的吞吐量?
八.阻塞队列
- a.ArrayBlockingQueue 和 LinkedBlockingQueue 的区别
- b.DelayQueue与SynchronousQueue
九.什么是CAS,优缺点
- a.同步锁的分类
- b.锁的分类
- c.Java中的悲观锁与乐观锁
十.Java中实现多线程的四种方式
- a.Thread类/Runnable接口/Callable接口/线程池
- b.Runnable和Callable有什么不同
十一.实现多线程的同步
- a.synchronized的用法
- b.Lock的用法
- c.volatile和synchronized区别
- d.什么场景下可以使用volatile替换synchronized
十二.实现线程之间的通信
- a.Object类中wait()\notify()\notifyAll()
- b.Condition接口
- c.管道实现线程间的通信(阐述其缺点)
十三.如何确保线程安全
十四.多线程的优点和缺点
十五.wait()和sleep()的区别
- a.join(),notify(),notifyAll()
十六.Java中interrupted()和isInterrupted()的区别
十七.Java创建线程后,直接调用start()方法和run()的区别
十八.什么是线程的上下文切换
十九.用户线程和守护线程有什么区别
二十.线程的状态
二十一.Java程序如何停止一个线程
二十二.ThreaLocal的作用及其原理