import java.util.*;
import java.lang.reflect.Array;
/**
* Created by IntelliJ IDEA.
* User: Administrator
* Date: 2008-7-7
* Time: 9:07:56
* To change this template use File | Settings | File Templates.
*/
public class ThreadPool {
//初始化空闲队列以及工作队列
List freeThreads = new ArrayList();
List runThreads = new ArrayList();
//设置线程数量
private int size = 10;
//设置关闭条件语句
boolean runflag=true;
public synchronized void stopthread() {
runflag=false;
runThreads.clear();
Thread.interrupted();
}
public synchronized boolean getrunflag(){
return runflag;
}
//线程池初始化
public ThreadPool(int size) {
this.size = size;
init();
}
public ThreadPool() {
init();
}
//添加线程
private void init() {
for (int i = 0; i < size; i++) {
try{
MyThread thread = new MyThread(this, i);
new Thread(thread).start();
freeThreads.add(thread);
try {
Thread.sleep(100);
} catch (Exception e) {}
}catch(Exception f){}
}
}
// 运行线程
public synchronized void runTask(Runnable task) {
MyThread thread = (MyThread) freeThreads.remove(0);
runThreads.add(thread);
thread.setTask(task);
}
//释放线程
public synchronized void free(MyThread thread) {
runThreads.remove(thread);
freeThreads.add(thread);
}
//显性显示信息
public synchronized void print() {
System.out.println("num:" + size);
System.out.println("free: " + freeThreads.size());
System.out.println(freeThreads);
System.out.println("run: " + runThreads.size());
System.out.println(runThreads);
}
//进行任务的线程
public class MyThread implements Runnable {
private ThreadPool pool;
private Runnable task = null;
private long start;
private long end;
private int num;
private int sum = 0;
public MyThread(ThreadPool pool, int num) {
this.pool = pool;
this.num = num;
}
//运行任务
public void run() {
while (getrunflag()) {
start = System.currentTimeMillis();
try {
if (task == null) {
this.wait();
}
task.run();
task = null;
pool.free(this);
end = System.currentTimeMillis();
sum += (end - start);
getTime();
} catch (Exception e) { }
}
}
public synchronized void setTask(Runnable task) {
this.task = task;
notifyAll();
}
//显示工作线程
public String toString() {
return "Thread: " + num;
}
//获取时间
public void getTime() {
System.out.println(this + "\nTime:" + (end - start) + "s\nSum:" + sum);
}
}
//测试
public static void main(String[] args) throws Exception {
ThreadPool pool = new ThreadPool();
pool.runTask(new Runnable() {
public void run() {
System.out.println("thread run No.1");
}
});
pool.print();
pool.runTask(new Runnable() {
public void run() {
System.out.println("thread run No.2");
}
});
pool.print();
pool.runTask(new Runnable() {
public void run() {
System.out.println("thread run No.3");
}
});
pool.print();
//关闭线程池
pool.stopthread();
}
}
分享到:
相关推荐
C++线程池的简单设计与实现,使用GCC编译,可自己改写为vs编译,使用pthread线程库和curl网络库。
如果想把这个线程池代码应用到自己的实现中去,只要写自己的业务处理函数和改写工作队列数据的处理方法就可以了。 Sample代码主要包括一个主程序和两个线程实现类 ThreadTest.cpp:主程序 CThreadManager:线程管理...
这部分知识常用于对一些复杂需求的实现及优化改写。最后两章介绍日常的优化改写案例。这部分是前面所学知识的扩展应用。, 如果您是开发人员,经常与Oracle打交道,那么《Oracle查询优化改写技巧与案例》可以帮助您...
这部分知识常用于对一些复杂需求的实现及优化改写。最后两章介绍日常的优化改写案例。这部分是前面所学知识的扩展应用。, 如果您是开发人员,经常与Oracle打交道,那么《Oracle查询优化改写技巧与案例》可以帮助您...
经过封装和接口定义,直接可以使用。用在网络数据快速加密,比较适用。
这部分知识常用于对一些复杂需求的实现及优化改写。最后两章介绍日常的优化改写案例。这部分是前面所学知识的扩展应用。 如果您是开发人员,经常与Oracle打交道,那么《Oracle查询优化改写技巧与案例》可以帮助您...
这部分知识常用于对一些复杂需求的实现及优化改写。最后两章介绍日常的优化改写案例。这部分是前面所学知识的扩展应用。, 如果您是开发人员,经常与Oracle打交道,那么《Oracle查询优化改写技巧与案例》可以帮助您...
YDOS-数组方式实现轮询时间片 基于ucosII 的简单任务调度实现 ,有相同任务优先级下的轮询,每个任务优先级可以一样 这种实现方式不是官方的用任务控制空的双向链表实现的 YDOS 嗯,以我的名字命名的,来源于...
《机器学习》实验讲义实验五改写 SVM 实现分类实验类似实验四的步骤和内容,尝试用 Python 代替 Matlab,利用 LIBSVM 和Python 实现分
汇编语言模拟一个dos功能,实现文件后缀名批量改写(有详细分析)。是我们的实验报告
Oracle查询优化改写技巧与案例2.0.pdf
教主Oracle SQL高级查询优化改写完美培训视频 2.0版,这个我参与培训的,包含视频、SQL文件、教学文档内容完整,分享给大家学习,共同努力进阶转型开发DBA,人称教主,做sql改写十多年了,sql改写功底很强!
Oracle查询优化改写 技巧与案例.pdf
主要介绍了PyTorch实现重写/改写Dataset并载入Dataloader,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Python没有MATLAB中的imfill函数,要实现空洞填充必须自己写函数。文件包含代码以及测试图片,Python3的语法,亲测可用
改写了proxool,让他支持spring注入 当用spring注入时间的时候,跑起来spring会报错。 是因为里面类似不一致的问题。改写之后,跑起来不会有问题