- 浏览: 191373 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
shinestmt:
Oracle取getColumnLabel全部都是大写的
使用ResultSetMetaData获取map结果集
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并发编程-Executor框架
2014-03-02 13:54 470Executor框架是指java 5中引入的一系列并发库中与 ... -
java解压rar文件
2014-03-01 22:27 2364package test; import ... -
线程的关闭
2012-09-05 22:57 968Java 之前有个api函数可以直接关闭线程, stop(), ... -
Jsp作为模板导出excel
2012-07-24 14:02 1242package com.bi.wms.rpt.report.w ... -
Flex与Java的交互3---HttpService方式
2012-07-22 11:57 70//TODO -
Flex与Java的交互2---URLLoader方式
2012-07-22 11:56 98//TODO -
wtc编程
2012-07-12 21:05 851Java读写报文函数的结构 1 定义存放报文的数据输出流和字节 ... -
@Autowired 与@Resource的区别
2012-05-27 01:22 1090@Autowired 与@Resource的区别: ... -
注解方式AOP应用例子
2012-05-27 01:15 931Service接口: public inte ... -
Java注解原理
2012-05-27 01:06 1149写一个类名为 ID 的注解 Java代码 ... -
Jsp自定义标签
2012-05-27 00:30 929Jsp页面中通过xml语法格式被调用,当JSP引擎将JS ... -
Java反射的相关方法
2012-05-26 23:35 813java反射相关方法: 获得类: 方法1: Cla ... -
jvm内存管理
2012-05-16 15:15 995java不像C++那样需要显示的分配和释放内存,对ja ... -
Collection框架图
2012-05-16 08:59 1126简化图: Java平台提供了一个全新的集合框架 ... -
构建高性能高并发Java系统
2012-05-13 21:54 1101场景 这里指的高性能高 ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-05-03 13:28 463下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些 ... -
动态获取工程中配置文件的路径
2012-04-28 12:47 1001说明:获取工程中src目录下config.properties ...
相关推荐
简单的线程池程序+中文文档 包结构: com.tangkai.threadpool --SimpleThread.java 工作线程 --TestThreadPool.java 程序入口 --ThreadPoolManager.java 线程池管理类
java 线程池管理类:Executors_.docx
java多线程,对多线程,线程池进行封装,方便使用
线程池管理源码 线程池管理源码 线程池管理源码
这里我们为大家分享上海创行科技技术总监严澜的博文——Java线程池管理及分布式Hadoop调度框架搭建。平时的开发中线程是个少不了的东西,比如tomcat里的servlet就是线程,没有线程我们如何提供多用户访问呢?不过很...
在《阿里巴巴java开发手册》中指出了线程资源必须通过线程池提供,不允许在应用中自行显示的创建线程,这样一方面是线程的创建更加规范,可以合理控制开辟线程的数量;另一方面线程的细节管理交给线程池处理,优化了...
在线程池中维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。使用线程池不仅能够保证内核的充分利用,还能防止过分调度。WEB服务器完成网页请求这样的任务...
平时的开发中线程是个少不了的东西,比如tomcat里的servlet是线程,没有线程我们如何提供多用户访问呢?不过很多刚开始接触线程的开发攻城师却在这个上面吃了不少苦头。怎么做一套简便的线程开发模式框架让大家从单...
因为项目需要,还涉及到排队下载的功能,所以就选择了线程池来管理线程以及线程池里面的任务队列workQueue来实现项目所需的功能; b:在实际使用中,服务器在创建和销毁线程上花费的时间和消耗的系统资源都相当大...
2.使用Java线程池的好处: 重用存在的线程,减少对象创建、消亡的开销,提升性能。 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。 提供定时执行、定期执行、单线程、...
线程池管理器用Java实现的简单线程池管理器
而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器...
一个比较简单的线程池至少应包含线程池管理器、工作线程、任务队列、任务接口等部分。其中线程池管理器(ThreadPool Manager)的作用是创建、销毁并管理线程池,将工作线程放入线程池中;工作线程是一个可以循环执行...
什么是线程池? 线程池是一个容纳多个线程的容器,线程池中的线程可以重复使用,无需反复创建线程而...3.提高线程的可管理性,根据系统的承受能力,调整线程池中工作线程的数目,防止消耗过多的内存,导致服务器死机
在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动、调度、管理线程的一大堆API了。在Java5以后,通过Executor来启动线程比用Thread的start()更好。在新特征中,可以很容易控制线程的启动、执行...
前言多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的。线程池应运而生,成为我们管理线程的利器。Java 通过 Executor
java做的线程池管理,比较实用,eclipse工程,导入即可运行。
简单的java线程池,创建,管理线程池,J2SE基础写的
可以直接使用的 任意类实现Runnable接口,则可使用 先构造ThreadPool对象,然后调用其execute方法,将自己的线程作为参数传入即可(注意,不能让你的线程开启) 支持最小线程数 支持最大线程数(线程增加后不会减少...