import java.util.*;
import java.io.*;
import java.net.*;
//线程池类,创建处于使用中和空闲中的进程队列
class ThreadPool{
private Vector freeThreads = new Vector();
private Vector inUseThreads = new Vector();//Vetcor对象
private static int value = 100;//线程池的最大并发线程数
public ThreadPool(){
fillpool(value);
}
private void fillpool(int poolsize){
for(int i = 0;i<poolsize;i++){
//this为所处的类内的当前该类对象,当前为ThreadPool类对象
PoolableThread pt=new PoolableThread(this);//传入线程池对象
pt.start();//启动线程
freeThreads.add(pt);//加入空闲线程队列
}
try{
Thread.sleep(100);//线程休眠
}catch(InterruptedException ie){}
}
public synchronized void runTask(Runnable task){//运行Runnable接口
if(freeThreads.isEmpty()){
throw new RuntimeException("All threads are in use");//空闲线程为空,抛出异常
}
PoolableThread t = (PoolableThread)freeThreads.remove(0);//提取空闲线程
inUseThreads.add(t);//加入到使用状态队列当中
t.setTask(task);//传入Runnable接口类型对象
}
synchronized void free(PoolableThread t){
inUseThreads.remove(t);//释放使用状态队列
freeThreads.add(t);//加入到空闲队列中
}
} //PoolableThread进程类
class PoolableThread extends Thread{
Runnable task = null;
ThreadPool pool;
PoolableThread(ThreadPool pool){
this.pool = pool;//PoolableThread类当前对象(this)的pool变量初始化
}
synchronized void setTask(Runnable task){
this.task = task;//PoolableThread类当前对象(this)的task变量初始化
notify();//唤醒等待进程
}
synchronized void executeTasks(){//等待进程被唤醒后执行Runnable接口
for(; ; ){
try{
if (task == null){
wait();//如果Runnable对象实例task为空,进入等待状态
}
}catch (InterruptedException ex){}
task.run();//执行Runnable接口run方法
task = null;//执行完后释放Runnable对象task
pool.free(this);//释放
}
}
public void run(){//PoolableThread进程类run()方法
executeTasks();
}
}
//Runnable接口类
public class PoolTest implements Runnable{
public static ThreadPool tp = new ThreadPool();//线程池类对象
Socket socket;
BufferedReader in;
PrintWriter out;
public PoolTest(Socket socket)throws IOException{
this.socket = socket;//初始化socket
this.in = new BufferedReader(new InputStreamReader(socket.getInputStream()));//建立输入流管道
this.out = out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);//建立输出流管道
tp.runTask(this);//运行Runnable类接口
try {Thread.sleep(100);}catch (Exception e){}
}
public static void main(String[] args)throws IOException{
ServerSocket s=new ServerSocket(8080);//初始化服务器端口
int i = 0 ;
System.out.println("Server start.."+s);
try{
while(true){Socket socket=s.accept();//无限监听客户请求
System.out.println("Connectino accept:"+socket+" "+i);
i++;
try{
new PoolTest(socket);//调用Runnable接口进程
}catch(IOException e){socket.close();}
}
}finally{s.close();}
}
public void run(){
try{ while(true){
String str=in.readLine();//读取输入流
if(str.equals("end"))break;
System.out.println("Echo ing :"+str);
} System.out.println("Close");
}catch(IOException e){}
finally {try{socket.close();}
catch(IOException e){}
}
}
}//服务器程序结束
分享到:
相关推荐
简单的线程池程序+中文文档 包结构: com.tangkai.threadpool --SimpleThread.java 工作线程 --TestThreadPool.java 程序入口 --ThreadPoolManager.java 线程池管理类
用java实现的线程池,自己是初学着,程序参考网上。
一个比较简单的线程池至少应包含线程池管理器、工作线程、任务队列、任务接口等部分。其中线程池管理器(ThreadPool Manager)的作用是创建、销毁并管理线程池,将工作线程放入线程池中;工作线程是一个可以循环执行...
Java中Executors类中几种创建各类型线程池方法及简单实例
可以直接使用的 任意类实现Runnable接口,则可使用 先构造ThreadPool对象,然后调用其execute方法,将自己的线程作为参数传入即可(注意,不能让你的线程开启) 支持最小线程数 ...支持简单日志记录
java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。 2.数据批量导出。 3任务数据异步执行。 4.多线程...
简单实用的java线程池实例代码。包括测试代码和工程文件。
java开发过程,经常会用到线程池技术,这里简单介绍一个构建线程池的实例
java简单线程池的实现,使用jdk的Executors.newFixedThreadPool方法来实现固定大小线程池
简单的java线程池,创建,管理线程池,J2SE基础写的
举个简单的例子: 假如有一个工厂,工厂里面有10个工人,每个工人同时只能做一件任务。 因此只要当10个工人中有工人是空闲的,来了任务就分配给空闲的工人做; 当10个工人都有任务在做时,如果还来了任务,...
主要为大家详细介绍了java简单实现多线程,及java爬虫使用线程池实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
主要介绍了Java 线程池详解及创建简单实例的相关资料,需要的朋友可以参考下
java线程池threadpool简单范例,使用threadgroup类
此文档是: 基于简单线程池概念的JAVA服务器端应用 附有连接ORACLE数据库等简单操作. 操作描述: 服务器启动后,会启动10个子线程运行.(配合客户端10个请求进行模拟,控制台输出模拟过程) 服务器主程序进入一个有...
简单线程池 简单的线程池
线程池管理器用Java实现的简单线程池管理器
Java 线程池示例 一个简单的 Java 线程池示例
Java并发编程常见知识点源码集锦,涉及到对象锁,Executors多任务线程框架,线程池等示例,列出一些源码包中包括的内容: volatile关键字的非原子性、volatile关键字的使用、AtomicInteger原子性操作、线程安全小...
JAVA线程池介绍以及简单实例,代码加文档 。原始资源连接 https://wenku.baidu.com/view/a3d09d0316fc700abb68fce9.html?from=search