CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

您现在的位置: IT专家网 > Web服务子站 > 技巧

一个简单的Thread缓冲池的实现

作者: xuyy_cn,  出处:赛迪网, 责任编辑: 李春禹, 
2008-02-14 11:21
  在应用中,我们常常需要Thread缓冲池来做一些事以提高程序的效率和并发性。本文演示了如何利用Queue这种数据结构实现一个简单的Thread缓冲池。

  可以注意一下get和put方法中while的使用,如果换成if是会有问题的。这是个很容易犯的错误。;-)

  在以上代码中使用了ExceptionAdapter这个类,它的作用是把一个checked Exception包装成RuntimeException。详细的说明可以参考我的避免在Java中使用Checked Exception一文。

  接下来我们需要一个对象来表现Thread缓冲池所要执行的任务。可以发现JDK中的Runnable interface非常合适这个角色。

  最后,剩下工作线程的实现就很简单了:从SyncQueue里取出一个Runnable对象并执行它。  

public class Worker implements Runnable {
  public Worker(SyncQueue queue) {
  _queue = queue;
  }
  public void run() {
  while (true) {
  Runnable task = (Runnable) _queue.get();
  task.run();
  }
  }
  protected SyncQueue _queue = null;
  }
  下面是一个使用这个Thread缓冲池的例子:

  //构造Thread缓冲池  

SyncQueue queue = new SyncQueue(10);
  for (int i = 0; i < 5; i ++) {
  new Thread(new Worker(queue)).start();
  }
  //使用Thread缓冲池 
 Runnable task = new MyTask();
  queue.put(task);
  为了使本文中的代码尽可能简单,这个Thread缓冲池的实现是一个基本的框架。当使用到实际中时,一些其他功能也可以在这一基础上添加,比如异常处理,动态调整缓冲池大小等等。

共2页。 9 1 2

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅

       
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i