[学习笔记]Java代码构建一个线程池的自己学习写的实例,用这个你会更好的理解文章内容
2008-04-05 00:06
1256 查看
//SimpleThread.java
public class SimpleThread extends Thread{
private boolean runningFlag;
private String argument;
private int threadNumber;
public boolean isRunning(){
return runningFlag;
}
public synchronized void setRunning(boolean flag){
runningFlag = flag;
if(flag){
this.notify();//唤醒在此对象监视器上等待的单个线程。
}
}
public String getArgument() {
return argument;
}
public void setArgument(String argument) {
this.argument = argument;
}
public SimpleThread(int threadNumber){
this.threadNumber=threadNumber;
runningFlag = false;
System.out.println("当前启动的是线程"+threadNumber);
}
public synchronized void run(){
try{while(true){
if(!runningFlag){
this.wait();
}else{
System.out.println("正在处理您输入的../"" + getArgument() +"/"...已经处理完毕");
sleep(5000);
System.out.println("--线程号为"+this.getThreadNumber()+"休眠5秒钟--");
setRunning(false);
System.out.println("线程号为**"+this.getThreadNumber()+"**休眠结束");
}
}
}catch(InterruptedException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public int getThreadNumber() {
return threadNumber;
}
public void setThreadNumber(int threadNumber) {
this.threadNumber = threadNumber;
}
}
-------------------
//
import java.util.*;
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();
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("..当前是第" + (i+1)+"个线程在处理您输入的 /""+ argument+"/"");
currentThread.setArgument(argument);
currentThread.setRunning(true);
return;
}
}
if(i == vector.size()){
System.out.println("线程池的线程都在使用,没有多余的线程,请选择其他时间..");
}
}
}
----------------------
public class TextThreadPool {
public static void main(String args[]){
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){}
}
}
public class SimpleThread extends Thread{
private boolean runningFlag;
private String argument;
private int threadNumber;
public boolean isRunning(){
return runningFlag;
}
public synchronized void setRunning(boolean flag){
runningFlag = flag;
if(flag){
this.notify();//唤醒在此对象监视器上等待的单个线程。
}
}
public String getArgument() {
return argument;
}
public void setArgument(String argument) {
this.argument = argument;
}
public SimpleThread(int threadNumber){
this.threadNumber=threadNumber;
runningFlag = false;
System.out.println("当前启动的是线程"+threadNumber);
}
public synchronized void run(){
try{while(true){
if(!runningFlag){
this.wait();
}else{
System.out.println("正在处理您输入的../"" + getArgument() +"/"...已经处理完毕");
sleep(5000);
System.out.println("--线程号为"+this.getThreadNumber()+"休眠5秒钟--");
setRunning(false);
System.out.println("线程号为**"+this.getThreadNumber()+"**休眠结束");
}
}
}catch(InterruptedException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public int getThreadNumber() {
return threadNumber;
}
public void setThreadNumber(int threadNumber) {
this.threadNumber = threadNumber;
}
}
-------------------
//
import java.util.*;
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();
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("..当前是第" + (i+1)+"个线程在处理您输入的 /""+ argument+"/"");
currentThread.setArgument(argument);
currentThread.setRunning(true);
return;
}
}
if(i == vector.size()){
System.out.println("线程池的线程都在使用,没有多余的线程,请选择其他时间..");
}
}
}
----------------------
public class TextThreadPool {
public static void main(String args[]){
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){}
}
}
相关文章推荐
- (Java2D 学习笔记系列) (一)一个简单的图像填充实例及其分析理解
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
- (Java2D 学习笔记系列) (一)一个简单的图像填充实例及其分析理解
- Java代码构建一个线程池
- 100行Java代码构建一个线程池
- Java代码构建一个线程池
- Java代码构建一个线程池
- 100行Java代码构建一个线程池
- 用java代码构建一个线程池
- Java代码构建一个线程池
- 用Java代码构建一个线程池
- 【面向对象课程项目:纸牌】Java实例学习(三):对自己代码的修正与加壳(仍然要对比源码)
- Java学习笔记------一个能相互通信的半双工Socket C/S实例
- 100行Java代码构建一个线程池
- 深度学习一:自己写java代码,训练一个神经元
- 多个TermQuery或一个MultiFieldQueryParser构建BooleanQuery多个域的检索学习实例代码
- java事务学习笔记(四)--成功的案例(自己实现一个线程安全的TransactionManager)
- [转载]java 代码构建线程池的实例
- 多个TermQuery或一个MultiFieldQueryParser构建BooleanQuery多个域的检索学习实例代码
- 100行Java代码构建一个线程池