ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

多线程-线程之间通讯

2022-07-12 12:03:41  阅读:147  来源: 互联网

标签:通讯 多个 等待 线程 多线程 唤醒 wait


线程通讯

概念:多个线程在处理同一个资源 但是处理的动作 (线程的任务)却不相同

比如:线程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上的全部线程

标签:通讯,多个,等待,线程,多线程,唤醒,wait
来源: https://www.cnblogs.com/aimz01/p/16469578.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有