chidaodezhongsheng
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔档案
2012年1月 (1)
2010年10月 (1)
文章档案
2010年12月 (7)
2010年11月 (6)
2010年10月 (24)
搜索
最新评论
1. re: Http参数传递时的乱码过滤器[未登录]
是是是是是是
--啊啊
2. re: Servlet配置到Web.xml中
配置好了 它整体的流程是什么啊?
--Tovep
3. re: JDBC基本操作
期待...
--Tovep
4. re: 再写银行排队
LZ 写的不错 啊!!!
--Tovep
5. re: 生产消费问题
臭小子 居然FZZT
--Tovep
阅读排行榜
1. 无题(188)
2. 很久没更新了,真的太久了(170)
评论排行榜
1. 很久没更新了,真的太久了(0)
2. 无题(0)
Powered by:
博客园
模板提供:
沪江博客
BlogJava
|
首页
|
发新随笔
|
发新文章
|
联系
|
聚合
|
管理
再写银行排队
这次的银行排队我们稍作调整,调整就是银行工作人员办理业务的时候,在队列里依次取出排队人员,并且保证每个人员只能取出一次,不能被多个窗口取到,这就需要多线程了,每一个窗口就是一个独立的线程,并且所有窗口去队列里取排队人员的时候,涉及到资源共享的问题,要将资源上锁,也就是使用synchronized关键字,可以保证每一个排队人员只被取到一次。
下面看看代码和运行结果:
服务器:
public
class
QueueServer
{
public
Queue
<
Waiter
>
waiterlist
=
new
LinkedList
<
Waiter
>
();
public
Queue
<
GoldWaiter
>
goldwaiterlist
=
new
LinkedList
<
GoldWaiter
>
();
public
Queue
<
Waiter
>
init()
{
Waiter w
=
null
;
for
(
int
i
=
1
;i
<
50
;i
++
)
{
w
=
new
Waiter();
w.setNumber(i);
w.setFrontnumer(i
-
1
);
waiterlist.offer(w);
}
return
waiterlist;
}
public
Queue
<
GoldWaiter
>
goldinit()
{
GoldWaiter w
=
null
;
for
(
int
i
=
1
;i
<
10
;i
++
)
{
w
=
new
GoldWaiter();
w.setNumber(i);
w.setFrontnumer(i
-
1
);
goldwaiterlist.offer(w);
}
return
goldwaiterlist;
}
}
测试类:
public
class
TestQueue
implements
Runnable
{
QueueServer server
=
new
QueueServer();
Queue
<
Waiter
>
waiterlist
=
server.init();
Queue
<
GoldWaiter
>
goldwaiterlist
=
server.goldinit();
public
static
void
main(String[] args)
{
TestQueue tq
=
new
TestQueue();
Thread t1
=
new
Thread(tq,
"
1号窗口
"
);
Thread t2
=
new
Thread(tq,
"
2号窗口
"
);
Thread t3
=
new
Thread(tq,
"
3号窗口
"
);
t1.start();
t2.start();
t3.start();
}
public
synchronized
void
handBusiness()
{
Waiter w
=
null
;
GoldWaiter gw
=
null
;
if
(waiterlist
!=
null
)
{
gw
=
goldwaiterlist.poll();
if
(gw
!=
null
)
{
System.out.println(
"
尊敬的大爷,您的号码是
"
+
gw.getNumber()
+
"
请您到
"
+
Thread.currentThread().getName()
+
"
办理业务
"
);
}
else
{
w
=
waiterlist.poll();
if
(w
!=
null
)
{
System.out.println(
"
个人业务用户,您的号码是
"
+
w.getNumber()
+
"
请您到
"
+
Thread.currentThread().getName()
+
"
办理业务
"
);
}
else
{
System.out.println(
"
现在没有用户办理业务了,喝杯咖啡吧,哈哈
"
);
}
}
}
}
public
void
run()
{
for
(
int
i
=
0
;i
<
20
;i
++
)
{
handBusiness();
try
{
Thread.sleep(
100
);
}
catch
(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
看看运行结果:
发表于 2010-11-07 22:48
迟到的钟声
阅读(133)
评论(1)
编辑
收藏
评论
#
re: 再写银行排队
回复
更多评论
LZ 写的不错 啊!!!
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问