`

Java线程池管理

    博客分类:
  • Java
 
阅读更多

 

import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ThreadPoolManager {

 
 /*
  * 将构造方法访问修饰符设为私有,禁止任意实例化。
  */
 private ThreadPoolManager() {}
 
 /*
  *实例化私有的静态成员变量线程池管理对象
  */
 private static ThreadPoolManager manager = new ThreadPoolManager();
 
  /*
   * 线程池单例创建方法
   */
 public static ThreadPoolManager newInstance() {
   return manager;
 }
 

 // 线程池维护线程的最少数量
 private final static int CORE_POOL_SIZE = 3;

 

 // 线程池维护线程的最大数量
 private final static int MAX_POOL_SIZE = 10;

 

 // 线程池维护线程所允许的空闲时间
 private final static int KEEP_ALIVE_TIME = 0;

 

 // 线程池所使用的缓冲队列大小
 private final static int WORK_QUEUE_SIZE = 10;

 

 // 任务调度周期
 private final static int TASK_QOS_PERIOD = 10;

 

 // 任务缓冲队列
 private Queue<Runnable> taskQueue = new LinkedList<Runnable>();

 

  /*
   * 线程池超出界线时将任务加入缓冲队列
   */
 final RejectedExecutionHandler handler = new RejectedExecutionHandler() {
   public void rejectedExecution(Runnable task, ThreadPoolExecutor executor) {
    taskQueue.offer(task);
   }
 };

 

  /*
   * 将缓冲队列中的任务重新加载到线程池
   */
 final Runnable accessBufferThread = new Runnable() {
   public void run() {
    if (hasMoreAcquire()) {
     threadPool.execute(taskQueue.poll());
    }
   }
 };

 

  /*
   * 创建一个调度线程池
   */
 final ScheduledExecutorService scheduler = Executors .newScheduledThreadPool(1);

 

  /*
   * 通过调度线程周期性的执行缓冲队列中任务
   */
 final ScheduledFuture<?> taskHandler = scheduler.scheduleAtFixedRate(
    accessBufferThread, 0, TASK_QOS_PERIOD, TimeUnit.MILLISECONDS);

 

  /*
   * 线程池
   */
 final ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
    CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME, TimeUnit.SECONDS,
    new ArrayBlockingQueue<Runnable>(WORK_QUEUE_SIZE), this.handler);

 


  /*
   * 消息队列检查方法
   */
 private boolean hasMoreAcquire() {
   return !taskQueue.isEmpty();
 }

 

  /*
   * 向线程池中添加任务方法
   */
 public void addExecuteTask(Runnable task) {
   if (task != null) {
    threadPool.execute(task);
   }
 }

 
 
}

分享到:
评论

相关推荐

    Java简单线程池 线程池中文文档

    简单的线程池程序+中文文档 包结构: com.tangkai.threadpool --SimpleThread.java 工作线程 --TestThreadPool.java 程序入口 --ThreadPoolManager.java 线程池管理类

    java 线程池管理类:Executors_.docx

    java 线程池管理类:Executors_.docx

    java多线程,对多线程,线程池进行封装,方便使用

    java多线程,对多线程,线程池进行封装,方便使用

    线程池管理源码 java 源码

    线程池管理源码 线程池管理源码 线程池管理源码

    Java线程池管理及分布式Hadoop调度框架搭建

    这里我们为大家分享上海创行科技技术总监严澜的博文——Java线程池管理及分布式Hadoop调度框架搭建。平时的开发中线程是个少不了的东西,比如tomcat里的servlet就是线程,没有线程我们如何提供多用户访问呢?不过很...

    java线程池ThreadPoolExecutor类使用详解.docx

    在《阿里巴巴java开发手册》中指出了线程资源必须通过线程池提供,不允许在应用中自行显示的创建线程,这样一方面是线程的创建更加规范,可以合理控制开辟线程的数量;另一方面线程的细节管理交给线程池处理,优化了...

    java线程池讲义+代码

    在线程池中维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。使用线程池不仅能够保证内核的充分利用,还能防止过分调度。WEB服务器完成网页请求这样的任务...

    JAVA线程池管理及分布式HADOOP调度框架搭建

    平时的开发中线程是个少不了的东西,比如tomcat里的servlet是线程,没有线程我们如何提供多用户访问呢?不过很多刚开始接触线程的开发攻城师却在这个上面吃了不少苦头。怎么做一套简便的线程开发模式框架让大家从单...

    java线程池概念.txt

    因为项目需要,还涉及到排队下载的功能,所以就选择了线程池来管理线程以及线程池里面的任务队列workQueue来实现项目所需的功能;  b:在实际使用中,服务器在创建和销毁线程上花费的时间和消耗的系统资源都相当大...

    Java几种线程池类型介绍及使用.docx

    2.使用Java线程池的好处: 重用存在的线程,减少对象创建、消亡的开销,提升性能。 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。 提供定时执行、定期执行、单线程、...

    thread-pool-manager:用Java实现的简单线程池管理器

    线程池管理器用Java实现的简单线程池管理器

    Java线程池技术详解

    而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器...

    创建Java程序中线程池的详解

    一个比较简单的线程池至少应包含线程池管理器、工作线程、任务队列、任务接口等部分。其中线程池管理器(ThreadPool Manager)的作用是创建、销毁并管理线程池,将工作线程放入线程池中;工作线程是一个可以循环执行...

    Java中多线程的使用线程池.docx

    什么是线程池? 线程池是一个容纳多个线程的容器,线程池中的线程可以重复使用,无需反复创建线程而...3.提高线程的可管理性,根据系统的承受能力,调整线程池中工作线程的数目,防止消耗过多的内存,导致服务器死机

    java线程池常用方法.docx

    在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动、调度、管理线程的一大堆API了。在Java5以后,通过Executor来启动线程比用Thread的start()更好。在新特征中,可以很容易控制线程的启动、执行...

    Java 线程池框架核心代码分析1

    前言多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的。线程池应运而生,成为我们管理线程的利器。Java 通过 Executor

    ThreadPoolManager_线程池管理

    java做的线程池管理,比较实用,eclipse工程,导入即可运行。

    java 简单线程池

    简单的java线程池,创建,管理线程池,J2SE基础写的

    线程池(Java实现,简易)

    可以直接使用的 任意类实现Runnable接口,则可使用 先构造ThreadPool对象,然后调用其execute方法,将自己的线程作为参数传入即可(注意,不能让你的线程开启) 支持最小线程数 支持最大线程数(线程增加后不会减少...

Global site tag (gtag.js) - Google Analytics