- 线程池七个参数
https://blog.csdn.net/ye17186/article/details/89467919 - 怎么设置线程数?
https://mp.weixin.qq.com/s/ZktmvL-UhaOz-ssSQk7UAQ - 多线程死锁的产生以及如何避免死锁
产生死锁的条件:
**互斥:**至少有一个资源必须处在非共享模式,即一次只能有一个进程使用,如果另一进程申请该资源,那么申请进程必须延迟直到该资源释放为止。
**占有并等待:**进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
**非抢占:**资源不能被抢占,进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能 由获得该资源的进程自己来释放(只能是主动释放)。
**循环等待:**有一组进程{P0,P1,…Pn},P0等待的资源被P1占有,P1等待的资源被P2占有,Pn-1等待的资源被Pn占有,Pn等待的资源被P0占有。
形成死锁必须要满足这四个条件。那么违背这几个条件中的任何一个就不会形成死锁,这种方式成为 死锁预防,而死锁避免是动态的检测分配资源的状态是否安全。 - 死锁解决方式
- 死锁预防
- 死锁避免
- 死锁检测并恢复
三者处理死锁的方式可以类比为:死锁预防,直接铲平坑;死锁避免,直接跳过坑;死锁检测并恢复,摔到坑里,修正一下继续前行。
对于互斥而言:有的资源本身就是互斥的,所以通常无法破坏这一必要条件。
对于占有并等待:破坏它,可以指定这样的规则(协议):每一个进程执行前一次性申请完所有资源。或者 每个进程申请当前所需要的资源,当需要使用其他资源时,需要把之前申请的资源释放掉。前者可以理解为破坏等待,后者可以理解为破坏占有。这样做使得资源得利用率很低(最后阶段可能需要用一下打印机,而将其在整个运行期占有);对于优先级低得进程来说,多次释放资源很容易造成它们饥饿。
对于非抢占:破坏它,即对于已经分配的资源可以进行抢占。当一个优先级比较低,那么它的资源往往会被优先级高得剥夺,导致它饥饿。
对于循环等待:对所有资源类型进排序,要求每个进程按照资源编号递增顺序申请资源。
1、避免多次锁定
2、具有相同的加锁顺序。
3、使用定时锁
4、死锁检测 jstack命令、jdk提供的工具:jconsole、visualvm
三、事务传播机制
https://blog.csdn.net/weixin_39625809/article/details/80707695
四、一致性哈希
内含实现代码:
https://blog.csdn.net/suifeng629/article/details/81567777
五、Spring
1、获取bean三种方式
https://mp.weixin.qq.com/s/rfh2BmICnClR6lhIG541Iw
2、Springboot自动装配原理
https://mp.weixin.qq.com/s/2Qu31COBW1tBYZ4Pa-n_Dw
https://mp.weixin.qq.com/s/JVBsspx_Dg3aAX7yEU_AFA
3、Spring 循环依赖如何解决
Spring循环依赖
4、springboot异步调用
5、springclould配置中心