其他分享
首页 > 其他分享> > 多线程-线程之间通讯

多线程-线程之间通讯

作者:互联网

线程通讯

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

比如:线程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