首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java并发线程-堵塞队列的实现和思考

2012-10-06 
java并发线程-----阻塞队列的实现和思考根据think in java 的描述,如果没有任务会阻塞,那么单处理器机器上

java并发线程-----阻塞队列的实现和思考
         根据think in java 的描述,如果没有任务会阻塞,那么单处理器机器上使用并发就没有任何意义。这句话我觉得可以反着理解,那就是假如你对你的程序不考虑用并发来实现,那么你无须考虑任务的阻塞问题。
     阻塞队列多半是解决对同一个(共享)资源进行操作的时候互相协作的问题。比如说有这样一个场景:某个工厂有生产工和搬运工两种角色,前者负责把生产好的产品放入仓库,
后者把仓库里面的产品搬出去卖。假如说仓库的产品数量为零,那么搬运工大可以睡上一觉,等生产工生产出产品,然后再搬。我们抽象出一个实现阻塞队列需要的元素,首先,仓库里面的产品是共享的资源,其次,生产工和搬运工需要互相协调这个资源的产生和消耗,他们应该是对应于程序中的两个线程,互不干扰又互相协调。
     基于这个分析,我们就开始吧。
     首先我们新建阻塞操作类blockoperator,代码如下:
     


   
注:本类中,首先创建了一个notempty做锁的对象,取物品的时候当产品为0时,notempty等待,此时会让位与另一个线程(生产)得到此对象锁,并且唤醒notempty上所有的等待锁。在生产完成之后,由于刚才等待的线程已经被唤醒,那么这个搬运工会移除此产品。下面会有我本机运行的效果,对照看一下会一目了然

然后创建生产工线程类createproduce,代码如下:


    当我准备想在blockoperator里面加一个判断产品最大数量的锁对象,比如themaxobject,后来在take和offer里面分别加上限制,但是免不了会嵌套synchronized,那么这样会产生死锁。死锁大多是嵌套synchronized产生的。快下班了,写的快,刚才那个问题没太细想,高手们可以帮助出解决方案。
 

热点排行