关于线程通信的通俗解释

来源:互联网 发布:中国软件外包印度差距 编辑:程序博客网 时间:2024/04/30 02:15

线程通信主要分为以下几个部分,下面通过生活中图书馆借书的例子简单讲解以下:

  • 通过共享对象通信

    加入图书馆只有一本《java并发编程实战》,小A早上的时候把这本书给借走了,然后下午小B去图书馆去找这本书,这时候小A和小B是两个线程,《java并发编程实战》就是共享对象(类似于多线程中的全局变量的资源),小B发现这本书已经被借走了,所以就回去等了几天,几天后,小B又去图书馆发现这本书被还回来了,就把书借走了,这就是通过共享对象进行通信。

  • 忙等待

    由于快要BAT实习生招聘了,所以小B非常想看这本书,所以小B就每隔一个小时(while循环)就去看看这本书有没有被还回来了,这样虽然比较耗费处理器资源,但是只要书一旦被还回来,小B就可以马上知道。

  • wait() notify() notifyAll()

    由于图书馆隔着宿舍比较近,所以小B发现每隔一个小时就去图书馆身体有点吃不消,不过很快,学校的图书馆系统增加了短信提醒功能(notify()),所以小B可以一边睡觉一边等短信。

  • 丢失的信号

    图书馆系统是这么设计的,当有一本书被还回来的时候,就会给等待者发短信,但是短信只能发送一次,如果没有等待者,短信也会发出(只不过这个时候没有没有接受者),问题出现了,因为短信只会发一次,当书被还回来的时候,没有人等待借书,他会发一条空短信,但是之后有等待借此本书的同学永远也不会再收到短信,导致这些同学会无休止的等待。为了解决这个问题,我们要进入等待状态的时候先打电话问问图书馆阿姨是否需要继续等待。

  • 假唤醒

    图书馆系统有一个bug,会是不是给用户发送错误短信,我们很听话,收到短信就会去图书馆借书,但是到达图书馆后发现书根本就没有被还回来,然后接着做其他的事情。

0 0
原创粉丝点击