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

无情 阅读:583 2021-04-01 10:24:40 评论:0

截图效果:

 

 

任务功能代码:

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) { 
		} 
	} 
 
}


 

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号