复习八(多线程)
1.进程:进程是应用程序执行的实例,进程有独立的内存空间和系统资源
2.线程:线程是cpu调度和分配的基本单位,线程是进程中执行运算的最小单位,可以完成一个独立的顺序控制流程
一个进程中同时运行了多个线程用来完成不同的工作称之为多线程
多线程是交替占用cpu资源而并非真正的一起执行
多线程优点:
1.充分利用CPU资源
2.简化编程模型
3.带来良好的用户体验
java提供了java.long.Thread类支持线程编程
主线程:main()方法为主线程入口,产生其他子线程的线程必须最后完成执行因为他执行各种关闭操作
获取主线程对象:
Thread thread=Thread.currentThread();
创建线程:
1.继承Thread类
1.定义一个类继承Thread
2.重写run方法
3.使用start()方法启动线程
2.实现Runnable接口
Threa thread=new Thread(实现接口的类名);
thread.start();
继承Thread 类编写简单可以直接操作线程适用于单线程
实现Runnable类 避免了单继承的局限性便于共享资源
线程调度:按照特定的机制为多个线程分配cpu资源的使用权
线程方法:
.setPriority(等级) :设置线程优先级 默认为5 数越大优先等级越高
.sleep(毫秒数) :线程睡眠
.join() :强制执行
.yield() :暂停本线程执行其他线程(该线程状态处于就绪状态而不是阻塞状态)
.interrupt() :中断线程
.isAlive() :测试线程是否处于活动状态
线程的礼让只是提供了一种可能,但不一定会实现
当多个线程操控同一个数据时会造成数据不安全问题,可以使用Synchronized修饰方法控制对类成员的访问,控制资源一次只能一个线程进行操作
例:
public Synchronized void 方法名(){ } 或 synchronized(同步对象 ,this表示当前对象){ }
当一个线程访问一个同步代码块时其他的所有线程都不能访问,除非代码块不是同步的
方法是否同步 效率 适合的场景
线程安全: 是 低 多线程共同开发
非线程安全: 否 高 单线程
线程池: 因为线程缺乏统一管理占用过多的系统资源,缺乏更多的功能入定时执行定期执行等功能所有产生了线程池
线程池的好处:
1.重用存在的线程减少对象创建,消亡的开销
2.有效的控制最大并发数提高系统资源使用率
3.定时执行与定期执行
线程池所在的包:java.util.Concurrent 顶级接口为 Executor 实现线程池的类是 ExecutorService
java.util.Concurrent.Executors 类提供创建线程池的方法
new CachcdThreadPool(); 创建一个可缓存的线程池
new SingleThreadExecutor(); 创建一个单线程的线程池 只有一个线程
new FixedThreadPool(线程数量);创建一个固定的线程池
new ScheduledThreadPool(线程数量);创建一个固定长度的线程池可以设置定时来执行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构