A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jdzzlf 中级黑马   /  2013-3-15 20:54  /  1993 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 jdzzlf 于 2013-3-16 08:55 编辑

1、银行业务调度系统的号码生成器类NumberManager中产生号码和生成号码的方法为什么要加上同步?如果不加上同步,会出现什么样的问题呢?
2、为什么在ServiceWindow中使用的是Executors.newSingleThreadExecutor()方法,而主类MainClass中使用的是Executors.newScheduledThreadPool(1)?
3、newSingleThreadExecutor()方法是怎样的一个运行机制呢?同样newScheduledThreadPool的运行机制呢?
希望牛人能够帮忙解答,谢谢。

点评

如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-16 08:14

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

2 个回复

倒序浏览
个人理解:
1.NumberMannager中的generateNumber()和fetchServiceNumber()两个方法都是要被不同的线程调用的。所以要同步的。
因为在MainClass中会创建三个定时器,来分别定时产生新的普通号码  快速号码以及vip号码,而每个定时器里都产生了一个线程
来获取号码,每个线程都调用了上面两个方法。如果不同步的话,会产生线程安全问题,可能会发生号码错乱,具体的你可以代码实现下。
2.Executors是jdk1.5的新特性中的一个工具类,里面定义了很多的静态方法。因为在ServiceWindow中对窗口操作时,只需要一个线程就
可以了,所以使用newSingleThreadExecutor(Thread thread)方法,  来创建一个单线程。但在MainClass中需要定时产生不同种类的号码,
所以就使用了Executors.newScheduledThreadPool(1),并调用这个方法返回值的scheduleAtFixedRate()方法来创建一个可以固定频率
产生号码的一个定时器。
3.具体的机制就不清楚了,可以反复看下视频,结合java的帮助文档看看。希望可以帮到你。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
jdzzlf 来自手机 中级黑马 2013-3-15 21:38:42
藤椅
黑马李超 发表于 2013-3-15 21:24
个人理解:
1.NumberMannager中的generateNumber()和fetchServiceNumber()两个方法都是要被不同的线程调用 ...

非常感谢,感觉有点思绪了。我在好好理解下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马