2012-12-12 18 views
0

我有一个基本上有单元(共享内存)和汽车(可观察线程)矩阵的程序。在每次移动之前,每辆车要求访问下一个单元,如果下一个单元被阻塞,则它进入一个同步块,调用wait(),并且线程进入休眠状态。我想知道是否有任何方法可以让汽车在等待时做些事情(),然后当他得到通知时,他可以在等待之前继续做他正在做的事情。多线程在等待时做些什么

回答

1

您将不得不重新设计:不要使用线程模拟汽车。有一个线程池执行任何需要的任务,并具有带回调函数的异步模型指导汽车的行为。如果一个单元格被阻塞,汽车的状态根本不会改变,线程池可以做其他事情。当单元格被释放时,触发相应的回调函数,这会将更新任务提交到池中。

+0

我会考虑线程池,感谢 – Nmas

+0

我看着成,但我不认为我将能够在汽车类中使用线程池而不是线程,主要是因为所有汽车都没有同时实例化。我有几个车库,里面有列表,里面是所有车辆“停放”的地方,这意味着我从每个车库开始新的Thread(car).start(),并且例如每个车库启动2辆新车,目的地另一个车库.. – Nmas

+1

我的建议比仅用线程池替换线程的运行要深刻得多。你的设计将一个模拟实体(汽车)紧紧地绑定到一个线程上,这个设计从根本上来说是有缺陷的,没有一个有生产价值的系统就不敢这样设计。事实上,你可能根本不需要多线程---你需要像Swing,一个运行主事件调度循环的线程和事件处理程序中的所有代码。 –

0

我已经做了类似于你所描述的事情,使用Handler s进行双向线程通信。

  • 子/工人/“车”线程做工作,进入睡眠状态一段设定的时间(100毫秒〜),并唤醒检查状态变化的线程类成员变量时。

  • 父线程会将Handler消息发送给工作线程,并且工作线程接收命令并将工作线程类中的成员变量设置为在工作人员下次休眠时检测到。

下面是我一直在检讨,以掌握如何使用Handler S和有效的线程间通信链接:

+0

谢谢,我会研究一下 – Nmas