一、创建线程的四种方式
(picture4)
https://blog.csdn.net/weixin_42582008/article/details/100677786
二、线程的状态及影响线程状态的一些方法(线程协作)
https://blog.csdn.net/weixin_42582008/article/details/100712099
1)5种状态或6种状态
源码里是6种,那就6种吧 https://blog.csdn.net/pange1991/article/details/53860651
2)终止线程的3个方法
3)线程中断
4)等待(wait)和通知(notify)
5) 挂起(suspend)和继续执行(resume)方法
6) 等待线程结束(join)和谦让(yield)及睡眠(sleep)
7)在锁那一部分,有个condition,await(),signal(),signalAll()等
8)LockSupport的park(),unpark()方法,可以替代(5)
三、juc包中的锁
https://blog.csdn.net/weixin_42582008/article/details/100995071
主要介绍juc包中与锁相关的API和组件,以及这些组件的使用方式和实现。
1.Lock接口的简单介绍
2.同部队列器AQS
1)同步队列器的作用及在作用原理概述
2)队列同步器的实现分析
3.重入锁
4.读写锁
5.LockSupport工具
6.Condition接口
四、java并发容器
https://blog.csdn.net/weixin_42582008/article/details/101229428
1.ConcurrentHashMap的实现原理与使用
这个的原理还是得看,网上搜应该都能搜到相关博客。
2.ConcurrentLinkQueue
3.BlockingQueue
1) ArrayBlockingQueue
2)LinkedBlockingQueue
3)PriorityBlockingQueue
4)DelayQueue
5)SynchronousQueue
6)LinkedTransferQueue
4.ConcurrentSkipListMap(跳表)
5. Fork/Join框架
6.CAS及ABA问题
五、java中的原子类
https://blog.csdn.net/weixin_42582008/article/details/101669843
1.AtomicInteger
2.无锁的对象引用:AtomicReference
3.无锁的数组 AtomicIntegerArray
4. 对象中某个字段的原子操作:AtomicIntegerFieldUpdater
AtomicStampedReference解决ABA问题
六、锁的优化及注意事项
https://blog.csdn.net/weixin_42582008/article/details/101836245
1.有助于提高锁性能的几点建议
2. Java虚拟机对锁优化所做的努力(synchrozied优化)
1) 锁偏向
2) 轻量级锁
3) 自旋锁
4) 锁消除
3 .ThreadLocal
4. 无锁
5. 死锁
1)死锁是什么
2) 死锁检测方法
3) 死锁避免的方法
4)死锁解除的方法
5)死锁必要条件
七、与并发有关的设计模式
https://blog.csdn.net/weixin_42582008/article/details/102153841
1. 单例设计模式
2.不变模式
3.生产者-消费者模式
4.Future模式
八、线程池
https://blog.csdn.net/weixin_42582008/article/details/102080129
1.线程池的意义和概念
2. JDK对线程池的支持:Executor框架
3. 核心线程池的内部实现
4. 拒绝策略
5.自定义线程创建
6.扩展线程池
7.线程池中如何确定一个比较合适的线程数量:
8. 打印出线程池执行任务时出错的堆栈
9. 线程池的增长策略
10.阻塞队列的应用
九、synchronized
1.synchronied简述(picture7)
mutex互斥
2.synchronized用法
3.synchronized与volatile的区别:picture 6
volatile不具有原子性的例子:https://www.jianshu.com/p/f74044782927 只是多个线程都可见,但多个线程仍然可以同时修改,不具有原子性,导致错误
4.synchronized与ReentranLock区别 picture,下面链接1也有
5.底层原理
原理链接2有讲,分为同步代码块和同步方法;对synchronized的优化,是通过成为锁的那个对象的对象头进行优化的(见2,3)。
https://blog.csdn.net/zc19921215/article/details/84780335
https://www.cnblogs.com/javaminer/p/3889023.html
对象头:
https://blog.csdn.net/lkforce/article/details/81128115
N.问题补充
https://blog.csdn.net/weixin_42582008/article/details/100761701
1.进程和线程间的区别
2.多线程的好处以及问题
3.多线程的优先级
4.守护线程(Deamon线程)
5. 多线程共用一个数据变量注意什么
6.线程间通信方式
7.并发级别有哪些
阻塞、无饥饿、无障碍、无锁、无等待
https://www.cnblogs.com/Joe-Go/p/9647298.html
8.java内存模型
Java内存模型简称JMM,本身是一个抽象概念并不真实存在,描述的是一种规范,通过这组规范定义了程序中各个变量的访问方式。规定所有变量都存储在主内存中,主内存是共享内存区域,所有线程都可以访问,但是线程对变量的操作(比如读取赋值)必须在工作内存中进行。首先要将变量从主内存中拷贝到自己的工作内存中,然后再对变量进行操作,操作完成后写回主内存,不能直接操作主内存中的变量。工作内存是每个线程的私有区域,不同线程无法访问对方的工作内存,线程之间的通信要通过主内存完成。
https://www.jianshu.com/p/15106e9c4bf3等,深入了解java虚拟机12章也有相关内容
9.多线程的三大特性及happen before原则
原子性 可见性 有序性 https://www.cnblogs.com/goldlong/p/10953909.html
happen befroe原则 https://www.jianshu.com/p/1508eedba54d
10.快速失败和安全失败 picture17