黑马程序员技术交流社区

标题: 银行业务调度系统疑问 [打印本页]

作者: jdzzlf    时间: 2013-3-15 20:54
标题: 银行业务调度系统疑问
本帖最后由 jdzzlf 于 2013-3-16 08:55 编辑

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

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

非常感谢,感觉有点思绪了。我在好好理解下。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2