自定义线程池代码
来源:互联网 发布:韩世远合同法总论知乎 编辑:程序博客网 时间:2024/06/11 06:58
package com.webdesk.swing.pad.core;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
class PoolThread{
//实现线程池对象时最大的可用线程数
private int maxThreads;
//线程池工作的启动开关
private boolean on = false;
//这里定义了一个任务队列容器,用途很明显,就是用来放置要处理的任务,先进来的先交给线程池处理
private Queue<Runnable> tasks = new ConcurrentLinkedQueue<Runnable>();//任务队列
//定义了一个放置Thread对象的容器,用来放置所有的线程
private List<Thread> poolThreads ;
//构造器,初始化时根据传入的参数来分配几条线程处理任务
public PoolThread(int maxThreads){
this.maxThreads = maxThreads;
poolThreads = new ArrayList<Thread>();
for(int i = 0;i < this.maxThreads;i++){
poolThreads.add(new Thread(new SingleThread()));
}
}
/**
*启动线程池,其实就是启动里面的每一条线程
*/
public void start(){
this.on = true;
for(int i = 0 ;i < poolThreads.size();i++){
//启动每个线程
poolThreads.get(i).start();
// System.out.println("the number " + i + " thread of " + poolThreads.size());
}
}
/**
*关闭线程池的工作
*/
public void shutdown(){
this.on = false;
}
/**
*
* @param task 被执行的新任务,实现Runnable接口
*/
public void execute(Runnable task){
synchronized(tasks){
tasks.add(task);//将任务添加到线程池中执行
tasks.notifyAll(); //通知所有的锁定tasks线程,让其执行新加进来的任务
}
}
/**
*定义线程池中的线程类,该线程必需是永远不终止的。
*/
class SingleThread implements Runnable{
public void run() {
while(on){
synchronized(tasks){
Runnable task = tasks.poll(); //取出任务队列中的任务执行
if(task != null)
task.run();
if(tasks.size() == 0){ //如果队列中没有等待的任务,则停止线程,直到有任务加进队列时唤醒该线程
try {
tasks.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
}
- 自定义线程池代码
- 自定义线程池(1)
- 自定义线程池(2)
- 自定义线程池(3)
- 自定义线程池ThreadPool
- C# 自定义线程池
- 自定义线程池
- java自定义线程池
- java 自定义线程池
- 自定义java 线程池
- 自定义线程池ThreadPoolExecutor
- Android 自定义线程池
- 自定义线程池Executors
- python自定义线程池
- 自定义Java线程池
- 自定义c++线程池
- 自定义线程池
- 自定义线程池---ThreadPoolExecutor
- Delphi操作word兼容性问题解决方法
- 程序、进程、内存映射
- MSR初步理解
- [Asp.net4.0]基于.NET Framework 4.0的解决方案部署
- 电讯盈科(pccw)面试题。
- 自定义线程池代码
- read_rnd_buffer和sort_buffer
- magento---jquery
- [Asp.net4.0]Windows2003 + IIS6 安装.Net FrameWork 4.0 兼容早期版本的测试
- 图片的上传和浏览
- winDbg符号路径设置
- 列表为空 没有边框解决
- QClub大连站,期待大家参与
- 感谢声明