Java 线程池
来源:互联网 发布:pubwin2015的数据库 编辑:程序博客网 时间:2024/06/05 11:23
java的线程池是通过HashMap获取当前的线程,保持线程同步
==============================================================
Java多线程为什么使用线程池
1:提高效率 创建好一定数量的线程放在池中,等需要使用的时候就从池中拿一个,这要比需要的时候创建一个线程对象要快的多。2:方便管理 可以编写线程池管理代码对池中的线程统一进行管理,比如说系统启动时由该程序创建100个线程,每当有请求的时候,就分配一个线程去工作,如果刚好并发有101个请求,那多出的这一个请求可以排队等候,避免因无休止的创建线程导致系统崩溃//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////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;/** * 线程池管理 * @author LW * @date 2011-2-12 */public class ThreadPoolManager { private static ThreadPoolManager tpm = new ThreadPoolManager(); // 线程池维护线程的最少数量 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 ThreadPoolManager() { } /* * 线程池单例创建方法 */ public static ThreadPoolManager newInstance() { return tpm; } /* * 消息队列检查方法 */ private boolean hasMoreAcquire() { return !taskQueue.isEmpty(); } /* * 向线程池中添加任务方法 */ public void addExecuteTask(Runnable task) { if (task != null) { threadPool.execute(task); } }}
- Java线程:线程池
- java--线程--线程池
- Java线程(六):线程池
- Java线程(五):线程池
- Java线程(五):线程池
- Java线程_07_线程池
- Java线程(五):线程池
- Java线程(六):线程池
- Java线程(五):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(五):线程池
- Java线程(六):线程池
- 三分子模型(trimolecular model)
- Java学习经验--(图片格式转换)
- 洛特卡-沃尔泰拉模型(Lotka-Volterra model)
- tomcat设置java jvm参数 优化
- 进程间通信
- Java 线程池
- Custom colored UITabBar icons
- 如何编写高效的Android代码
- Difference between perf testing / Stress testing / Load testing
- 常用术语
- Memcached 集群架构问题归纳
- Android-SDK-Tools的工具功能说明
- 路由器连猫不能上网的歪解
- jsf 实现文件下载