高级知识点:多线程,资源管理【笔记】
高级知识点:多线程,资源管理【笔记】
多线程
线程安全性对于多线程来说是至关重要的,因此我们要加锁来加强安全性
死锁分析
在任何地方都可以线程切换,甚至在一句语句中间也可以
要尽力的设想对自己不利的情况
不利的情况:
死锁的条件
第一就是互斥等待
第二个就是hold and wait,拿着一个锁去等待另一个锁
第三个是循环等待,拿着a的等b,拿着b的等a
第四个就是无法剥夺的等待
这四个条件必须同时完成才可以形成死锁,不然都可能没法组成死锁,所以要破除死锁的话,就从其中找方法
死锁防止
破除互斥等待,这种一般无法破除
破除hold and wait,可以一次性获取全部资源
破除循环等待,可以按照顺序获取资源
破除无法剥夺的等待,可以加入超时机制
线程池
创建线程开销大,为了防止这些开销,就出现了线程池,线程池就是预先建立好的一些线程,等任务派发,有了任务就去
线程池的实现很多时候都是编程语言中就有各自的实现
线程池的参数
corepoolsize:线程池中初始线程数量,可能处于等待状态
maximumpoolsize:线程池中最大允许的线程数量
keepalivetime:超出corepoolsize部分线程,如果等待这些,那么等待时间将被回收
线程池的java executor framework的演示
具体代码如下:
package interview.adv;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import interview.designpattern.task.CodingTask;
public class ExecutorTester {
public static void main(String[] args)
throws InterruptedException, ExecutionException {
ExecutorService executor = Executors.newFixedThreadPool(3);
List<Future<?>> taskResults = new LinkedList<>();
for (int i = 0; i < 10; i++) {
taskResults.add(executor.submit(new CodingTask(i)));
}
System.out.println("10 tasks dispatched successfully.");
for (Future<?> taskResult : taskResults) {
taskResult.get();
}
System.out.println("All tasks finished.");
executor.shutdown();
}
}
资源管理
java垃圾回收
不会被引用的对象会被回收掉
垃圾回收包括minor GC 和 full GC
垃圾回收的时候所有的运行都会暂停
java资源管理(输入输出)
内存会被回收,资源不会被释放,比如databaseconnection需要databaseconnection.close()来释放,操作大概
Java1.6的时候
Java1.7以后
c++的资源管理
c++没有final,没有try with resource,但是有析构函数
大致做法:
大部分的语言都有自己的垃圾回收机制
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!