黑马程序员技术交流社区
标题: Java多线程中关于一个计数器问题 [打印本页]
作者: hello_csu 时间: 2014-12-1 22:18
标题: Java多线程中关于一个计数器问题
本帖最后由 hello_csu 于 2014-12-2 12:10 编辑
问题描述:
在看书中遇到如下一个仿真例子:小区委员会苏,希望了解每天通过各个大门进入公园的总人数,每个大门都安装了一个计数器,当人通过事后计数器就会递增,其递增,也表示说总人数的共享计数器也会递增。
需求:现在需要统计出来每个门进入的人数和总人数。
其设计思路:
采用多线程机制,对每个门通过的人数采用一个线程去实现,且通过让其之间共享一个Count计数器去统计总人数。
代码设计如下Output Result:
Entrance0:1Total:1Entrance1:1Total:2
Entrance2:1Total:3
Entrance3:1Total:4
......
Entrance4:3Total:17
Entrance2:4Total:18
Entrance2:5Total:19
Entrance1:5Total:20
Entrance4:4Total:23
Entrance3:4Total:21
Entrance0:5Total:22
Entrance4:5Total:24
Entrance2:6Total:27
Entrance1:21Total:100
Entrance0:21Total:101
Entrance4:20Total:102
Entrance3:20Total:99
StoppingEntrance2:20
StoppingEntrance1:21
StoppingEntrance3:20
StoppingEntrance4:20
StoppingEntrance0:21
Total:102
Total:102
疑问点:现在Entrance4:4Total:23中是实现监控说每个门都通过的人数和这个时间点总人数,但依照我的理解Total的数目应该是一个递增的趋势值,但是从log输出来看,运行过程中是个比较随机的值,为什么会出现忽大忽小?
谁能帮解答一些,特别感谢。
作者: kerner 时间: 2014-12-1 23:52
朋友你代码写的真好,发现你发的帖子都不错,有营养。
线程同步有问题,你是保证了计数器同步,但是没有保证5个线程先后同步问题,你是用了5个不同的锁。
稍微改了一下你的代码。
作者: hello_csu 时间: 2014-12-2 11:41
感谢kernel楼主,你这样子一解释,我豁然明白了,非常谢谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |