多线程-线程之间通讯
线程通讯
概念:多个线程在处理同一个资源 但是处理的动作 (线程的任务)却不相同
比如:线程A用来生产包装的 线程B用来吃包子的 包子可以理解为同一资源 线程A于线程B处理的动作 一个是生产
一个是消费 那么线程A与线程B之间就存在线程通信问题
多个线程并发执行时 在默认情况下CPU是随机切换线程的 当我们需要多个线程来共同完成一件任务 并且我们希望他们由规律的执行 那么多线程之间需要一些协调通讯 以此来帮我们达到多线程共同操作一份数据
如果保证线程间通信有效利用资源:
多个线程在处理同一个资源 并且任务不同是 需要线程通信来帮助解决线程之间对同一个变量使用或者操作
就是多个线程在操作同一份数据时 避免对同一共享变量的争夺 也就是我们需要通过一定的手段使各个线程能有效的利用资源 而这种手段--等待唤醒机
等待唤醒机制
这是多个线程间的一种协作机制 线程我们想到的时线程间的竞争(race) 比如去争同步锁 但是者并不是故事的全部 线程间也会有协作机制
就是在一个线程进行了规定操作后 就进入等待状态 等待其他线程执行完他们的指定代码过后 再将其他线程执行完他们的指定代码过后 再将其他唤醒 再多个线程进行等待时 如果需要 可以使用nottifyAll()来唤醒所有的等待线程
wait/notify就是线程间的一种协调机制
等待唤醒中的方法
等待唤醒机制就是用于解决线程之间通信的问题 使用到的3个方法的含义如下:
1.wait:线程不再活动 不再参与调度 进入wait set中 因此不会浪费cpu资源 也不会去竞争锁时 这时线程状态即是WAITING 它还要等待别的线程执行一个特别的动作 也是通知再这个对象上等待线程
2.notify:则选取所通知对象的wait set中的一个线程释放 例如餐馆由空位置后 等候就餐最久的顾客最先入座
3.notifyAll:则释放所通知对象的wait set上的全部线程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix