您现在的位置是: 主页 > 最新文章 > 最新文章

Java中的多线程之线程间通信

2020-03-11 16:21 【最新文章】 人已围观

简介: 多线程这方面知识比较难,所以本人对这块知识的理解不是很深入,只是发一些基础的理解,本人也将努力学习,望各位大牛人士给些意见,谢谢。 1、什么是线程间通信 多个线程在处理同一个资源,但是处理的动作却不相同,即:线程执行的任务不一样。 举例:线程1是专门给成员变量赋值的,线程2是获取线程1所赋值的成员变量的值。我们把成员变量所在的类称为资源。 则线...

多线程这方面知识比较难,所以本人对这块知识的理解不是很深入,只是发一些基础的理解,本人也将努力学习,望各位大牛人士给些意见,谢谢。

1、什么是线程间通信

多个线程在处理同一个资源,但是处理的动作却不相同,即:线程执行的任务不一样。

举例:线程1是专门给成员变量赋值的,线程2是获取线程1所赋值的成员变量的值。我们把成员变量所在的类称为资源。

则线程1和线程2都是使用的同一个资源,但是执行的线程任务不同。一个是赋值,一个是获取值。这就是两个线程间的通信。

2、线程间通信安全问题

接着上一个案例:线程1和线程2一个赋值,一个获取值。这就有可能导致线程2第一次获取到的值可能是线程1第二次赋的值,而不是第一次赋的值。这就可能导致数值紊乱。

为了解决线程2第一次获取的值是线程1第一次赋值的,线程2第二次获取的值是线程1第二次赋值的等待,可以采用等待唤醒机制。

3、等待唤醒机制

等待唤醒机制:还是以上面的案例为例。当线程1赋值一个成员变量时,但是线程2还没有获取,则使当前线程1处于等待状态,直到线程2获取到了成员变量的值,在唤醒线程1,继续赋值。这就是等待唤醒机制。

4、等待唤醒机制涉及的方法

<1>wait方法

作用:将正在执行的线程释放其执行资格和执行权,并存储到线程池中,让线程处于等待状态。

<2>notify方法

作用:唤醒线程池中处于wait状态的线程,一次只能唤醒一个,而且是任意的。

<3>notifyAll方法

作用:可以将线程池中的所有处于wait状态的线程都唤醒。

注意:以上三个方法,都需要在同步线程中使用才有效。并且使用时,必须表明方法所属的锁是哪个,这样才能确定出操作的到底是哪个锁上的线程。

5、等待唤醒机制代码实现

<1>创建资源类

创建资源Resource类,并且定义一个成员属性flag,用于标识是否处于wait状态。

<2>创建Input类,该类用于给成员变量赋值的线程类

<3>创建Output类,该类用于获取成员变量的值

<4>在main方法中,开启两个线程

<5>查看运行结果

综上,Java中的多线程之线程间通信介绍完了。

孟文鹏博客版权所有丨如未注明 , 均为原创丨 转载请注明Java中的多线程之线程间通信

很赞哦! ( )

随机图文

文章评论

    总共有: 条评论 来说两句吧...

    用户名:

    联系方式:

站点信息

  • 建站时间 :2019-6-18
  • 共有会员 : 2名
  • 共有文章 :3938篇
  • 今日更新 :13篇
  • 百度收录
  • 文章阅读 :560791人次
  • 公众号 :扫描二维码,关注我们
-->