Java基础 -- 多线程(二)
Java基础 -- 多线程(二)
1. 线程同步
- 什么是线程同步?
翻译:线程同步是针对于共享临界资源的两个或多个并发执行的线程。同步线程是为了避免临界资源使用过程中发生的冲突。否则,当并发运行的线程尝试在同一时间修改同一个变量会发生冲突。
- 为什么引入线程同步?
- 如何实现线程同步?
实现线程同步的核心思想就是:给被访问的资源上锁,某一时刻只能被一个线程操作
Java中实现线程同步共有三种方法,分别是:同步代码块,同步方法以及Lock锁
-
同步代码块:
-
格式:synchronized (同步监视器)
-
具体含义:
-
synchronized:同步;作用:保证同一时刻,被修饰的代码块或者方法只会有一个线程执行,以达到保证并发安全的效果
-
同步监视器:锁-->obj,Object obj = new Object() ;
-
被同步的代码:操作共享数据(多个线程共同操作的变量)的代码
-
-
优缺点:
-
-
同步方法:
-
格式:修饰符 synchronized 返回值类型 方法名(参数列表)
-
要点:
-
-
Lock锁
- 具体格式:实例化ReentrantLock对象; lock() ;需要同步的语句;unlock();
【注】线程同步方式使用顺序建议:Lock--> 同步代码块 -->同步方法块
-
synchronized详解
-
synchronized和Lock的异同
2. 线程通信
- 什么是线程通信?
线程通信就是当多个线程共同操作共享的资源时,互相告知自己的状态以避免资源争夺。
- 线程之间如何通信?
- wait()/notify()/notifyAll()详解
3. 线程池
- 池化技术思想
为了减少获取资源的消耗,提高对资源的利用率
-** 什么是线程池,为什么引入线程池?**
总结来说,频繁的创建销毁线程会造成资源的浪费,为了解决这个问题,引入线程池
- 线程池的好处?
4. ThreadLocal
- 为什么引入ThreadLocal?
一般来说,变量被所有线程共享,如果线程想拥有一个只属于自己的本地变量,就设置成ThreadLocal。用来避免线程竞争,也避免了线程安全问题
- ThreadLocal是什么?
ThreadLocal:本地线程变量
ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。
-
ThreadLocal怎么用?
- 创建一个ThreadLocal对象
private ThreadLocal<Integer> localInt = new ThreadLocal<>();
- setAndGet()设置获取变量值
public int setAndGet(){
localInt.set(8);
return localInt.get();
}
5. 死锁
- 什么是死锁?
进程P1此时占有资源R1,P2占有资源R2。进程P1申请R2,申请到R2后释放资源R1;进程P2申请R1,申请到R1后释放占用的资源R1。
这种因进程之间相互竞争资源导致相互等待而无法推进的情况被成为死锁。
-
产生死锁的四个必要条件?
-
互斥条件
-
请求和保持条件
-
不剥夺条件
-
循环等待条件
-
-
如何处理死锁问题?
处理死锁主要从三个方面来探讨:预防,避免,检测与恢复
-
预防死锁:破坏死锁发生的四个条件之一
- 临界资源-->共享资源(破坏互斥条件)
- 资源预先分配(破坏请求和保持)
- 可剥夺(破坏不剥夺)
- 资源有序分配策略(破坏循环等待)
-
避免死锁:安全序列,银行家算法
-
死锁检测与恢复
- 检测:死锁检测算法
- 恢复:剥夺资源;撤销进程·
6. 参考资料
https://blog.csdn.net/shengabc/article/details/47379541
https://juejin.cn/post/6959333602748268575
https://www.jianshu.com/p/210eab345423
https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html
https://www.zhihu.com/question/529948412
https://zhuanlan.zhihu.com/p/138689342
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧