码迷,mamicode.com
首页 > 编程语言 > 详细

Java线程间通讯

时间:2015-10-31 18:23:50      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

考虑经典的排队问题,其中一个线程正在生产一些数据,另一个是消费它。为了使问题更有趣,假设生产者必须等待,直到它会产生更多的数据消费完毕之前。

在一个轮询系统,消费者会浪费大量的CPU周期,而它等待着生产者生产。一旦生产结束了,就开始轮询,浪费更多的CPU周期等待消费者??完成,依此类推。显然,这种情况是不希望的。

为了避免轮询,Java包括通过下面的方法优雅的进程间通信机制:

  • wait( ): 这个方法告诉调用线程放弃监视器和进入睡眠状态,直到其他线程进入同一监视器和调用notify()。

  • notify( ): 这种方法唤醒第一个线程调用wait()在同一个对象上。

  • notifyAll( ): 这种方法唤醒所有调用wait()的同一个对象上的线程。最高优先级的线程将首先运行。

这些方法被实现为final的方法在Object,因此所有的类都有它们。这三种方法都只能从一个同步的上下文中被调用。

这些方法的对象中声明。各种形式的wait( ) 存在,使可以指定一段时间等待。

例子:

下面的示例程序包括四个类:Q,想同步队列,Producer,也就是生产队列的条目线程对象;Consumer,即消耗队列的条目线程对象和PC,tiny类创建一个Q,生产者和消费者。

写这个程序在Java中正确的方法是使用wait()和notify()方法,以在两个方向的信号,如下所示:

Put: 1
Got: 1
Put: 2
Got: 2
Put: 3
Got: 3
Put: 4
Got: 4
Put: 5
Got: 5

 

 


Java线程间通讯

标签:

原文地址:http://www.cnblogs.com/hbai/p/4925784.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!