会员
周边
众包
新闻
博问
闪存
赞助商
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
一个人-我的学习随笔
有时候对待技术就好像对待女人,我们通常在已经了解或者相信她有着诱人的身体的时候,才会乐于或者有耐心对待脱衣的前戏。
博客园
::
首页
::
博问
::
闪存
::
新随笔
::
联系
::
订阅
::
管理
::
公告
java写的简单线程池
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)
{}
}
}
}
//
服务器程序结束
请各位朋友指正
posted on
2005-08-18 11:20
oisiv
阅读(
528
) 评论(
0
)
编辑
收藏
举报
会员力量,点亮园子希望
刷新页面
返回顶部