首页 >> 读书频道 >> 电脑 >> [线程技术]一个完整的线程池的实例
 
· Java源码:URL编程
· 推拉门式菜单
· Java RMI编程
· 利用RamdonAcce
· Hashtable简易数
· Java核心代码例程之:
· Java核心代码例程之:
· Java核心代码例程之:
· Java核心代码例程之:
· ava核心代码例程之:T
· Java核心代码例程之:
· Java核心代码例程之:
 
· 加油金顺剧情分集介绍完整
· 红楼梦:120回全本[清
· 素质教育在美国
· 全唐诗卷四十六
· 韩剧《布拉格恋人》剧情介
· 夜航船[作者:明·张岱]
· 局外人[作者:韩·可爱淘
· 现场流行病学
· 源氏物语[日本:紫式部]
· 武林寓言故事
· 2006高考录取规则
· 首批中国世界名牌产品和2
 
· (出租)中动商场部分及写
· (出租)中动动漫基地&#
· 喜剧学院
· 《善德女王》剧情介绍
· 魔女18号 剧情
· 丑女无敌剧情介绍
· 魔女幼熙剧情介绍
· 龙游天下剧情介绍
· 震撼世界的七日剧情介绍
· 静静的白桦林剧情介绍
· 心情日记—老公今天我想对
· 旗舰剧情介绍
欢迎来到月影社区!如果您觉得这里不错,请推荐给您的朋友们。月影社区:http://wf66.com/

[线程技术]一个完整的线程池的实例


查看有无更新版本

关键字:JAVA 2006-8-31

 

线程池用一个双向链表来表示,池中的元素是处于休眠状态的工作线程。ThreadPool类大部分工作都是来维护这个双向链表,当有新的请求到达时,先从表头摘取一个工作线程,将其唤醒转入工作状态。如果线程池为空,则创建一个新的工作线程。
/**
* free software
* from apusic
* by www.cn-java.com 2001
*/
import java.util.LinkedList;
public class ThreadPool
{
static final long IDLE_TIMEOUT = 60000L;
private String name;
private int minsize;
private int maxsize;
private int nextWorkerId = 0;
private LinkedList pool = new LinkedList();
public ThreadPool() {
this("PooledThread");
}
public ThreadPool(String name) {
this(name, 0, 20);
}
public ThreadPool(String name, int minsize, int maxsize) {
this.name = name;
this.minsize = minsize;
this.maxsize = maxsize;
}
public synchronized void run(Runnable runner) {
Worker worker;
if (runner == null) {
throw new NullPointerException();
}
// get a worker from free list...
if (!pool.isEmpty()) {
worker = (Worker) pool.removeFirst();
} else {
// ...no free worker available, create new one...
worker = new Worker(name + "-" + ++nextWorkerId);
worker.start();
}
// ...and wake up worker to service incoming runner
worker.wakeup(runner);
}
// Notified when a worker has idled timeout
// @return true if worker should die, false otherwise
synchronized boolean notifyTimeout(Worker worker) {
if (worker.runner != null) {
return false;
}
if (pool.size() > minsize) {
// Remove from free list
pool.remove(worker);
return true; // die
}
return false; // continue
}
// Notified when a worker has finished his work and
// free to service next runner
// @return true if worker should die, false otherwise
synchronized boolean notifyFree(Worker worker) {
if (pool.size() < maxsize) {
// Add to free list
pool.addLast(worker);
return false; // continue
}
return true; // die
}
// The inner class that implement worker thread
class Worker extends Thread {
Runnable runner = null;
public Worker(String name) {
super(name);
}
synchronized void wakeup(Runnable runner) {
this.runner = runner;
notify();
}
public void run() {
for (;;) {
synchronized (this) {
if (runner == null) {
try {
wait(IDLE_TIMEOUT);
} catch (InterruptedException e) {}
}
}
// idle timed out, die or put into free list
if (runner == null) {
if (notifyTimeout(this))
return;
else
continue;
}
try {
runner.run();
} finally {
runner = null;
if (notifyFree(this))
return;
}
}
}
}
}

[线程技术]一个完整的线程池的实例

[ 1 ]
[线程技术]一个完整的线程池的实例 num

打印本页 关闭

关于我们版权声明本站导航友情连结作品演示 TOP↑