在java5中已经实现了线程池,现在处理大量并发时,不用再自己写线程池来做了,java5中有现成的东西来用。
但是我有点问题不知道怎么处理,希望知道的朋友给我指点一下:
以下是java文档中给出的实例:
用法示例
 class NetworkService {
    private final ServerSocket serverSocket;
    private final ExecutorService pool;    public NetworkService(int port, int poolSize) throws IOException {
      serverSocket = new ServerSocket(port);
      pool = Executors.newFixedThreadPool(poolSize);
    }
 
    public void serve() {
      try {
        for (;;) {
          pool.execute(new Handler(serverSocket.accept()));
        }
      } catch (IOException ex) {
        pool.shutdown();
      }
    }
  }  class Handler implements Runnable {
    private final Socket socket;
    Handler(Socket socket) { this.socket = socket; }
    public void run() {
      // read and service request
    }
 }
------------------------------------------
我的问题是:我创建了具有5个工作线程的池(poolSize=5),当有5个以上并发请求时,第5个请求以后的所有被排在队列中,等待空闲线程;如果前面工作的5个线程永远完不成自己的任务,那么第5个以后的请求就永远排在后面,得不到执行。假设class Handler的run方法是这样的(我是说假设,如果前5个线程在工作中由于其他原因阻塞了,基本上就跟下面一样了)
public void run() {
  while(true) {
    //do something
  }
}
那就像我说的,由于池中的5个线程都处于正常活动状态,线程池又不会自动把这些线程结束,其它请求就永远得不到执行;我想避免这种情况,该如何做??比如我想维护一个工作线程进行一项任务的最大时间,如果某个线程超出了这个时间,我就把它的任务结束掉,以便于新的任务别执行,我该怎么做?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【xjluogang】截止到2008-07-07 15:06:31的历史汇总数据(不包括此帖):
    发帖的总数量:9                        发帖的总分数:330                      
    结贴的总数量:5                        结贴的总分数:280                      
    无满意结贴数:1                        无满意结贴分:20                       
    未结的帖子数:4                        未结的总分数:50                       
    结贴的百分比:55.56 %               结分的百分比:84.85 %                  
    无满意结贴率:20.00 %               无满意结分率:7.14  %                  
    楼主加油
      

  2.   

    java控制线程执行时间,判断是否超时lz可以看一下下面的文章:http://blog.csdn.net/solonote/archive/2007/05/26/1626514.aspx
      

  3.   

    newFixedThreadPool这个是固定的线程数
    你可以选择其他的静态方法啊~~
    newCachedThreadPool()
    newScheduledThreadPool()