(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.作者投稿可能会经我们编辑修改或补充。