`
niedj
  • 浏览: 31019 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

转:最精简的java 线程池与任务队列

阅读更多
import java.util.*;
 public class WorkQueue
 {
    private final int nThreads;//线程池的大小
    private final PoolWorker[] threads;//用数组实现线程池
    private final LinkedList queue;//任务队列
 
   public WorkQueue(int nThreads){
      this.nThreads = nThreads;
      queue = new LinkedList();
      threads = new PoolWorker[nThreads];
 
       for (int i=0; i<nThreads; i++) {
          threads[i] = new PoolWorker();
          threads[i].start();//启动所有工作线程
       }
   }
 
   public void execute(Runnable r) {//执行任务
     synchronized(queue) {
             queue.addLast(r);
             queue.notify();
     }
   }
 
   private class PoolWorker extends Thread {//工作线程类
         public void run() {
                Runnable r;
                while (true) {
                     synchronized(queue) {
                       while (queue.isEmpty()) {//如果任务队列中没有任务,等待
                         try{
                           queue.wait();
                         }catch (InterruptedException ignored){}
                       }   
                        r = (Runnable) queue.removeFirst();//有任务时,取出任务
                    }
                    try {
                        r.run();//执行任务
                    }catch (RuntimeException e) {
                       // You might want to log something here
                   }
               }
       }
    }
 
 
  public static void main(String args[]){
       WorkQueue wq=new WorkQueue(10);//10个工作线程
       Mytask r[]=new Mytask[20];//20个任务
   
       for(int i=0;i<20;i++){
            r[i]=new Mytask();
            wq.execute(r[i]);
       }      
  }
 }
 class Mytask implements Runnable{//任务接口
          public void run(){
               String name=Thread.currentThread().getName();
               try{
                   Thread.sleep(100);//模拟任务执行的时间
               }catch(InterruptedException e){}
               System.out.println(name+" executed OK");
          }
   }
 

转自:http://www.cnblogs.com/null7/archive/2012/09/20/2696108.html

分享到:
评论

相关推荐

    java concurrent 精简源码

    本资源“java concurrent 精简源码”着重关注Java并发库(java.util.concurrent)的核心概念,包括阻塞队列和线程管理。下面将详细阐述这些知识点。 1. **Java并发库(java.util.concurrent)** Java并发库是Java ...

    线程池技术在J2ME网络通信中的应用研究

    2. **任务队列管理**:设计高效的任务队列,确保线程的充分利用,同时避免因队列过长而造成的延迟。 3. **线程优先级调整**:在资源紧张的情况下,可以通过调整线程优先级来优化关键任务的执行,保证网络通信的...

    java网络编程精简第三章(ServerSocket)

    ### Java网络编程精简第三章(ServerSocket)详解 #### 一、ServerSocket类概览 在Java网络编程中,`ServerSocket`类扮演着核心角色,尤其在客户端/服务器模型中,它作为服务器端的主要组件,负责监听特定端口上的...

    java 面试题 精简版 100道带答案 期末考试题常考 重点突出

    这份"java面试题100道精简版.doc"文档很可能是对以上各个领域的经典问题和解答的集合,对于备考Java面试的人来说,它是宝贵的复习资料。通过深入理解和实践这些知识点,不仅可以提高面试成功率,也有助于提升实际...

    Pro Java EE 5 Performance Management and Optimization

    《Pro Java EE 5 Performance Management and Optimization》是针对Java企业版5(JEE5)的一本专业性能管理和优化指南。这本书深入探讨了如何在Java EE 5平台上开发高效率、高性能的应用程序。以下是对该书内容的...

    ActiveMQ In Action精简版

    根据给定的文件信息,以下是从“ActiveMQ In Action精简版”中提炼出的关键IT知识点,主要聚焦于ActiveMQ的介绍、配置、使用及高级功能。 ### ActiveMQ概述 ActiveMQ是Apache软件基金会下的一个开源项目,它是一款...

    tomcat7.0性能优化-挑战极限精简版

    通常需要调整的参数包括`-Xms`(初始堆大小)、`-Xmx`(最大堆大小)、`-XX:NewRatio`(新生代与老年代的比例)、`-XX:SurvivorRatio`(年轻代中Eden区与Survivor区的比例)以及`-XX:MaxTenuringThreshold`(对象...

    CentOS系统参数优化.zip

    其次,`JVM-Tomcat线程-数据库连接池设置建议.docx`文件可能包含了关于Java虚拟机(JVM)和Tomcat应用服务器的线程池及数据库连接池的优化策略。JVM的堆内存分配、垃圾回收策略、以及线程池大小等都需要根据实际负载...

    jboss5纯净版80端口

    它提供了全面的企业级服务,包括事务处理、消息队列、安全性和数据库连接等功能。在本"jboss5纯净版80端口"中,我们关注的是其优化后的特性和配置更改。 首先,"纯净版"通常意味着去除了不必要的组件和插件,使得...

    zabbix常用模板集合

    此模板关注Tomcat的JVM内存使用、线程池状态、请求处理时间和错误率,有助于确保Web应用的稳定运行。 5. **zabbix php-fpm模块.xml**: PHP-FPM(FastCGI Process Manager)是PHP的FastCGI实现。此模板提供对...

    Tomcat中的Connector配置讲解

    对于Connector的线程管理,Tomcat允许用户配置线程池的最小线程数(minThreads)、最大线程数(maxThreads)和等待队列的长度(acceptCount)。当服务器启动时,Connector会根据配置来创建一组线程。如果线程池中...

Global site tag (gtag.js) - Google Analytics