您的位置:首页 > 编程语言 > Java开发

(Java功能篇)java版本 线程池实例代码

2013-08-07 09:57 666 查看
截图效果:







任务功能代码:

package com.rf.pool;

//任务对象
public class SimpleThread extends Thread {
	// 相关参数
	private boolean runningFlag;// 是否运行
	private String argument;

	public boolean isRunning() {
		return runningFlag;
	}

	// 同步锁方法(设置任务是否运行)
	public synchronized void setRunning(boolean flag) {

		runningFlag = flag;
		if (flag)
			// 唤醒在此对象监视器上等待的单个线程。
			this.notify();
	}

	public String getArgument() {
		return this.argument;
	}

	public void setArgument(String string) {
		argument = string;
	}

	// 相关构造函数(线程编号参数)
	public SimpleThread(int threadNumber) {
		runningFlag = false;
		System.out.println("线程: " + threadNumber + "准备开始。");
	}

	// 同步锁方法
	public synchronized void run() {
		try {
			while (true) {
				// 判断是否运行标准
				if (!runningFlag) {
					// 无任务,线程等待
					this.wait();
					// System.out.println("线程等待中......");
				} else {
					// 线程开始执行相关方法
					System.out
							.println("processing " + getArgument() + " 执行完毕.");
					sleep(5000);
					System.out.println("线程休眠");
					// 线程执行完毕(设置线程是否进行为false)
					setRunning(false);
				}
			}
		} catch (InterruptedException e) {
			System.out.println("Interrupt");
		}
	}

}


线程池代码:

package com.rf.pool;

import java.util.Vector;

public class ThreadPoolManager {
	private int maxThread;
	public Vector vector;

	// 设置最大线程
	public void setMaxThread(int threadCount) {
		maxThread = threadCount;
	}

	// 线程池的构造方法
	public ThreadPoolManager(int threadCount) {
		setMaxThread(threadCount);
		System.out.println("开始启动线程池:");
		vector = new Vector();
		// 线程启动存放至Vector数组中
		for (int i = 1; i <= 10; i++) {
			SimpleThread thread = new SimpleThread(i);
			// 添加相关任务线程
			vector.addElement(thread);
			thread.start();
		}
	}

	// 线程处理方法
	public void process(String argument) {
		int i;
		for (i = 0; i < vector.size(); i++) {
			SimpleThread currentThread = (SimpleThread) vector.elementAt(i);
			// 判断当前线程是否运行
			if (!currentThread.isRunning()) {
				System.out.println("Thread " + (i + 1) + "正在处理:" + argument);
				// 设置相关参数
				currentThread.setArgument(argument);
				// 设置该线程处于运行状态
				currentThread.setRunning(true);
				return;
			}
		}
		if (i == vector.size()) {
			System.out.println("线程池已满,请等待!.");
		}
	}

}


测试代码:

package com.rf.pool;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(
					System.in));
			String s;
			ThreadPoolManager manager = new ThreadPoolManager(10);
			while ((s = br.readLine()) != null) {
				manager.process(s);
			}
		} catch (IOException e) {
		}
	}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: