2.Java多线程
2.1.线程池有哪些常用线程池? 有什么区别? 在什么场景下进行使用
https://www.cnblogs.com/sachen/p/7401959.html
2.2 synchronized底层实现原理及锁优化
https://medlen.blog.csdn.net/article/details/88384493
2.3 线程同步和通信的方式
同步:互斥量, 信息量,事件
通信: volitle,notify,wait
2.4 lock和Synchronized的区别
1.一个是关键字,一个是接口
2.一个加锁前需要获得实例对象的锁或类对象的锁或指定对象的锁,一个是针对线程的
https://blog.csdn.net/e54332/article/details/86577071
2.5. CAS
https://joonwhee.blog.csdn.net/article/details/79561458
自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。
2.6. voilate原理和synchronized
https://blog.csdn.net/u012723673/article/details/80682208
https://zhuanlan.zhihu.com/p/133851347
volatile
是通过编译器在生成字节码时,在指令序列中添加“内存屏障”来禁止指令重排序的。
synchronized
同步语句块的实现使用的是 monitorenter
和 monitorexit
指令,其中 monitorenter
指令指向同步代码块的开始位置,monitorexit
指令则指明同步代码块的结束位置。
synchronized
修饰的方法并没有 monitorenter
指令和 monitorexit
指令,取得代之的确实是 ACC_SYNCHRONIZED
标识,该标识指明了该方法是一个同步方法。
2.7 fork的使用
https://blog.csdn.net/kxjrzyk/article/details/81603049
建立一个和主线程一样的子线程。
2.8 查找死锁的线程
https://blog.csdn.net/likun557/article/details/90770722
- 使用jstack查看产生死锁的线程
- 使用jconsole,查看死锁。
2.9 threadlocal是线程安全吗
如果threadlocal.get之后的副本,只在当前线程中使用,那么是线程安全的;如果对其他线程暴露,不一定是线程安全的。
https://www.cnblogs.com/luoxn28/p/10916253.html
2.10. hashmap怎么解决cas问题
添加版本号