java实现线程池,实现线程队列(转)
来源:互联网 发布:vb.net midioutopen 编辑:程序博客网 时间:2024/05/22 17:38
imp
public class ThreadPool
{
private static ThreadPool theInstance;
private final int nThreads;//线程池的大小
private final Workers[] threads;//用数组实现线程池
private final LinkedList queue;//任务队列
/**
* 单例构造方法
*
* @return
*/
public static ThreadPool getInstance() {
if (theInstance == null)
theInstance = new ThreadPool();
return theInstance;
}
/**
* 私有构造方法 默认1个线程在跑
*/
private ThreadPool() {
//默认1个线程在跑
this.nThreads = 1;
queue = new LinkedList();
threads = new Workers[nThreads];
for (int i=0; i<nThreads; i++) {
threads[i] = new Workers();
threads[i].start();//启动所有工作线程
}
}
/**
* 直接构造线程队列方法
*
* @deprecated
* @param nThreads
*/
public ThreadPool(int nThreads){
this.nThreads = nThreads;
queue = new LinkedList();
threads = new Workers[nThreads];
for (int i=0; i<nThreads; i++) {
threads[i] = new Workers();
threads[i].start();//启动所有工作线程
}
}
/*
*
*执行任务
*/
public void execute(Runnable r) {
synchronized(queue) {
queue.addLast(r);
queue.notify();
}
}
private class Workers extends Thread {//工作线程类
// logger logger
public void run() {
Runnable r;
while (true) {
synchronized(queue) {
while (queue.isEmpty()) {//如果任务队列中没有任务,等待
try{
queue.wait();
}catch (InterruptedException ignored){}
}
r = (Runnable) queue.removeFirst();//有任务时,取出任务
}
try {
r.run();//执行任务
}catch (RuntimeException e) {
// You might want to log something here
}
}
}
}
public static void main(String args[]){
ThreadPool wq=new ThreadPool(1);//10个工作线程
Mytask task[]=new Mytask[20];//20个任务
for(int i=0;i<20;i++){
task[i]=new Mytask();
wq.execute(task[i]);
}
}
}
class Mytask implements Runnable{//任务接口
public void run(){
String name=Thread.currentThread().getName();
try{
//System.out.println(System.currentTimeMillis());
Thread.sleep(100);//模拟任务执行的时间
}catch(InterruptedException e){}
System.out.println(name+" executed OK");
}
}
- java实现线程池,实现线程队列(转)
- JAVA实现线程池(2)---队列
- BlockingQueue队列实现线程池
- java 使用线程模拟 队列实现
- java实现线程安全的队列
- Java实现线程池
- Java线程池实现
- java实现线程池
- java线程池实现
- java实现线程池
- 线程池 队列生产者消费者模型实现
- 多线程 线程队列的实现
- python实现线程安全队列
- JAVA线程-线程的实现
- Java 线程池 队列
- Java实现通用线程池
- Java实现通用线程池
- JAVA线程池的实现
- 控制fieldset的高度
- lua 解析url
- Android TextView富文本、超链接和添加文字背景等其他效果的实现
- java中文乱码(转)
- Bad version number in .class file
- java实现线程池,实现线程队列(转)
- 在WebSphere部署WAR应用(转)
- 建立数据链路(库之间的访问-库指数据库)
- java下操作注册表方法(转)
- java向注册表写入和删除实例
- 使用InstallAnywhere7.1制作Java exe程序安装包(转)
- 写给走上创业路的人(转)
- 马云用创业经历写下的创业格言(转)
- mybatis 参考文档