您的位置:首页 > 电脑网络 > 软件 > 线程间通信一小例学习

线程间通信一小例学习

luyued 发布于 2011-02-05 00:56   浏览 N 次  

网站:JavaEye 作者:lighter 发表时间: 2007-06-16 13:41 此文章来自于 http://www.JavaEye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接: http://lighter.javaeye.com/blog/91021

wait:告诉线程放弃监视器并进入睡眠状态,直到其他线程进入同一监视器并调用notify为止
notify:唤醒同一对象监视器中调用wait的第一个线程,用于类似饭馆有一个空位后通知所有等候就餐顾客中的第一位可以入座的情况.
notifyAll:唤醒同一对象监视器中调用wait的所有线程,具有最高优先级的线程首先被唤醒并执行.

看下面的步骤:
Thread t --> synchronized(o)--->o.wait()--->o.notify
1、新建一个线程t
2、线程t得到对象o的lock旗标
3、此时线程t被放置在对象o的等待线程池中,t自动释放o的锁旗标
4、当另外的线程执行了对象o的notify()方法后,线程t可能会被从o的等待线程池中释放出来,并且移动到等待线程对象o的锁旗标的线程池中,当t得到锁旗标时就会执行下去

下面是一个经典的消费者-生产者的线程间访问的代码举例

生产者的类如下:
代码

消费者的类如下:
代码

下面是用户信息的类,最经典的用法,各类有各类应该的职责,put()与get()方法写得很不错,值得学习
代码

简单的运行类如下:
代码

注明:文中所有的代码均为[张孝祥JAVA视频教程中的代码,并非我本人所写,我记录下来,只是复习一下线程间的一些关键点的地方.


《 线程间通信一小例学习 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>
JavaEye推荐
北京 | 上海 | 杭州 | 深圳 | 成都 | 西安 - Dev2Dev TechDays
上海:高薪诚聘Lucene搜索工程师
优秀公司宏迅:招聘软件开发工程师,工作地点(上海,北京)
上海:著名网站土豆网:高薪招聘高级Java开发工程师和JAVA 项目负责人
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA

广告赞助商