论坛首页 入门技术论坛

一个简单的线程池

浏览 1410 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-13  

模拟一个java的线程池,虽然jdk1.5以后已经存在。

import java.util.LinkedList;

public class AppThreadPool {
	private int poolSize;

	private LinkedList queue;

	public AppThreadPool(int poolSize) {
		this.poolSize = poolSize;
		queue = new LinkedList();
		FileWorker[] Pool = new FileWorker[poolSize];
		for (int i = 0; i < Pool.length; i++) {
			Pool[i] = new FileWorker();
			Pool[i].start();
		}
	}

	public void addTask(Runnable r) {
		synchronized (queue) {
			queue.addLast(r);
			queue.notify();
		}
	}

	public int getSize() {
		return poolSize;
	}

	private class FileWorker extends Thread {
		public void run() {
			Runnable task;
			while (true) {
				synchronized (queue) {
					while (queue.isEmpty()) {
						try {
							queue.wait();
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
					task = (Runnable) queue.removeFirst();
				}
				task.run();
			}
		}
	}

}

 

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics