JobHu
随笔 - 8, 文章 - 0, 评论 - 6, 引用 - 0
数据加载中……
一个简化的java线程池示例
//以前写在blogger上的一篇老文了
曾经很好奇线程池是怎么实现的,.net中有现成的线程池可以使用,但是java中没有。还有就是Servlet的service方法是怎么样为每一个 Request在不同的线程中独立服务的,由于Servlet接口没有继承自Runnable接口,因此无法直接由一个Servlet对象生成多个线程。后来在网上找到了一个java版本的线程池的例子(http://www.informit.com/articles/article.asp?p= 30483&seqNum=1&rl=1)在该例子的基础上简化得到了下面这个版本的java线程池,记录在这里。
*******************
ThreadPool.java
*******************
package
threadPool;
import
java.util.ArrayList;
import
java.util.Collection;
public
class
ThreadPool
{
Thread[] threadArray;
Collection
<
Runnable
>
jobs
=
new
ArrayList
<
Runnable
>
();
public
ThreadPool(
int
threadNum)
{
threadArray
=
new
WorkerThread[threadNum];
for
(Thread thread : threadArray)
{
thread
=
new
WorkerThread();
thread.start();
}
}
public
synchronized
void
addJob(Runnable job)
{
jobs.add(job);
notify();
}
private
synchronized
Runnable getJob()
{
while
(jobs.isEmpty())
{
try
{
wait();
}
catch
(InterruptedException e)
{
e.printStackTrace();
}
}
Runnable job
=
jobs.iterator().next();
jobs.remove(job);
return
job;
}
private
class
WorkerThread
extends
Thread
{
public
void
run()
{
Runnable job
=
null
;
while
(job
==
null
)
{
job
=
getJob();
if
(job
!=
null
)
{
job.run();
}
job
=
null
;
}
}
}
}
*******************
ThreadPoolTest.java
*******************
package
threadPool;
public
class
ThreadTest
{
private
static
class
PrintClass
implements
Runnable
{
private
int
threadNo;
public
PrintClass(
int
threadNo)
{
this
.threadNo
=
threadNo;
}
public
void
run()
{
for
(
int
i
=
0
; i
<
10
; i
++
)
{
synchronized
(System.out)
{
System.out.println(
"
Thread
"
+
threadNo
+
"
:
"
+
i);
}
try
{
Thread.sleep(
1000
);
}
catch
(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
public
static
void
main(String[] args)
{
ThreadPool tp
=
new
ThreadPool(
3
);
for
(
int
i
=
0
; i
<
10
; i
++
)
{
tp.addJob(
new
PrintClass(i));
}
synchronized
(System.out)
{
System.out.println(
"
Job adding finished
"
);
}
}
}
posted on 2007-05-15 12:53
Job Hu
阅读(946)
评论(3)
编辑
收藏
评论
#
re: 一个简化的java线程池示例
2007-05-16 18:20 |
klvt
#
re: 一个简化的java线程池示例
回复
更多评论
扁担长
板凳
宽扁担想绑在
板凳
上
板凳
不让扁担绑在
板凳
上扁担偏要绑在
板凳
上
板凳
偏偏不让扁担绑在那
板凳
上
2007-05-18 16:39 |
klvt
#
re: 一个简化的java线程池示例
回复
更多评论
JDK1.5中已经提供线程池的支持了 java.util.concurrent 包
2007-06-15 15:41 |
jasson
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
博客园最新博文
博问
管理
Powered by:
语源科技BlogJava
Copyright © Job Hu
导航
语源科技BlogJava
首页
新随笔
联系
聚合
管理
<
2007年6月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔分类
Tomcat源代码(2)
(rss)
算法与数据结构(2)
(rss)
随笔档案
2007年7月 (4)
2007年5月 (3)
2007年4月 (1)
搜索
最新评论
1. re: Java Language Keywords[未登录]
无料
--klvt
2. re: 一个简化的java线程池示例
JDK1.5中已经提供线程池的支持了 java.util.concurrent 包
--jasson
3. re: Tomcat笔记(三)
Cool~写的好!
莫非你也要写一个类似tomcat的咚咚?
--yans
4. re: 一个简化的java线程池示例
评论内容较长,点击标题查看
--klvt
5. re: 一个简化的java线程池示例
评论内容较长,点击标题查看
--klvt
阅读排行榜
1. 一个简化的java线程池示例(946)
2. 实现一个栈,使其push,pop,min(取得栈中的最小元素)均为O(1)(932)
3. 二叉排序树变为双向链表(671)
4. Tomcat笔记(三)(396)
5. Tomcat笔记(一)(383)
评论排行榜
1. 一个简化的java线程池示例(3)
2. Tomcat笔记(一)(1)
3. Java Language Keywords(1)
4. Tomcat笔记(三)(1)
5. Tomcat笔记(二)(0)