我在设计多线程时经常碰到这样一个问题。例如在经典的product-customer模式中,有时并非我的product线程能控制自己生产的“产品”来供customer消费,而是要向外部系统要数据,这个时候不可避免要用product线程轮询外部系统的状态,直到得到“产品”。例如:轮询某个文件夹下某个文件是否已经存在,不存在就睡眠一段时间继续轮询。显然这样比较低效,请问有什么消息驱动的方式可以改进,即:一旦知道这个文件已存在立即通知product线程。
调试欢乐多
还有。多想程就已经意味着要轮询
所以这种情况下是不是只能用轮询。
如果外部不满足就wait,当外面的做好以后,就可以调用notify方法,这个时候,在wait的线程就被唤醒了,这比轮询的效率当然要高
为什么要自己检查呢?完全可以将这些东西封装在一个object里面通知Observer。
不过wait(时间),也就是定时查询,每隔多少时间去查询一次,这个时间很难保握住。
至于是不是要用wait,notify,
我觉得可以用BlockingQueue等等其他的新的多线程简单方式实现,比较省事写。查询的事情也可以用timer,好像ScheduledThreadPoolExecutor更好一些。但我只用过timer,呵呵。
TIMER的实现机制也是WAIT(时间)
问题还是没解决。为什么要自己检查呢?完全可以将这些东西封装在一个object里面通知Observerto BeShrek(今晚打老虎): 你能不能想清楚再回答啊。OBJECT通知OBESERVER,那谁通知OBJECT啊?