快速业务通道

Java线程/内存模型的缺陷和增强 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25
; + msgQ.take());   }   catch (InterruptedException ie) {}  }};new Thread(logger).start();}}

Excutor/ThreadFactory接口: 把相关的线程创建/回收/维护/调度等工作封装起来,而让调用者只专心于具体任务的编码工作(即实现Runnable接口),不必显式创建Thread类实例就能异步执行任务。

使用Executor还有一个好处,就是实现线程的“轻量级”使用。前面章节曾提到,即使我们实现了Runnable接口,要真正的创建线程,还是得通过new Thread()来完成,在这种情况下,Runnable对象(任务)和Thread对象(线程)是1对1的关系。如果任务多而简单,完全可以给每条线程配备一个任务队列,让Runnable对象(任务)和Executor对象变成n:1的关系。使用了Executor,我们可以把上面两种线程策略都封装到具体的Executor实现中,方便代码的实现和维护。

具体的实现有: PooledExecutor,ThreadedExecutor,QueuedExecutor,FJTaskRunnerGroup等

类关系图如下:

Java线程/内存模型的缺陷和增强 - 编程入门网

图6 Concurrent包Executor/ThreadFactory接口部分类关系图

下面给出一段代码,使用PooledExecutor实现一个简单的多线程服务器

代码5

package org.javaresearch.j2seimproved.thread;import java.net.*;import EDU.oswego.cs.dl.util.concurrent.*;public class TestExecutor{  public static void main(String[] args)  {   PooledExecutor pool = new PooledExecutor(new BoundedBuffer(10), 20);   pool.createThreads(4);   try   {    ServerSocket socket = new ServerSocket(9999);    for (; ; )    {     final Socket connection = socket.accept();     pool.execute(new Runnable()     {      public void run()      {       new Handler().process(connection);      }     });    }   }   catch (Exception e) {}   // die  }  static class Handler { void process(Socket s){ } }}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号