我有一个基本上有单元(共享内存)和汽车(可观察线程)矩阵的程序。在每次移动之前,每辆车要求访问下一个单元,如果下一个单元被阻塞,则它进入一个同步块,调用wait(),并且线程进入休眠状态。我想知道是否有任何方法可以让汽车在等待时做些事情(),然后当他得到通知时,他可以在等待之前继续做他正在做的事情。多线程在等待时做些什么
回答
您将不得不重新设计:不要使用线程模拟汽车。有一个线程池执行任何需要的任务,并具有带回调函数的异步模型指导汽车的行为。如果一个单元格被阻塞,汽车的状态根本不会改变,线程池可以做其他事情。当单元格被释放时,触发相应的回调函数,这会将更新任务提交到池中。
我已经做了类似于你所描述的事情,使用Handler
s进行双向线程通信。
子/工人/“车”线程做工作,进入睡眠状态一段设定的时间(100毫秒〜),并唤醒检查状态变化的线程类成员变量时。
父线程会将
Handler
消息发送给工作线程,并且工作线程接收命令并将工作线程类中的成员变量设置为在工作人员下次休眠时检测到。
下面是我一直在检讨,以掌握如何使用Handler
S和有效的线程间通信链接:
线程 - 处理的很好的概述(不活套)。瓦特/代码例如:
com.indy.testing.TestMain.java.MyThread.java
http://indyvision.net/2010/02/android-threads-tutorial-part-3/线程 - 处理的OK概述和弯针 http://techtej.blogspot.com/2011/02/android-passing-data-between-main.html
线程瓦特/ 2WAY通讯。 W /代码示例:sample.thread.messaging.ThreadMessaging.java http://codinghard.wordpress.com/2009/05/16/android-thread-messaging/
谢谢,我会研究一下 – Nmas
- 1. 什么是“等待线程”?
- 2. while循环在等待消息时做些什么
- 3. 多线程 - 等待线程
- 4. 多线程:等待在主线程
- 5. Android - 等待一段时间后做些什么(很简单)
- 6. Angular等待响应后端更新时应该做些什么?
- 7. 为什么主线程会等待
- 8. 多线程:阻塞等待超时
- 9. 多个线程等待NetworkStream.Read
- 10. pthread_join - 多线程等待
- 11. C++等待多线程
- 12. C#等待和多线程
- 13. 线程在等待某事时发生了什么
- 14. Java多线程等待线程完成
- 15. 等待多个线程(POSIX线程,C++)
- 16. C++线程等待时间
- 17. 我在做什么错? (多线程)
- 18. 等待线程
- 19. 启动多个线程,为什么你必须等待?
- 20. Scrapy:等待一些网址被解析,然后做点什么
- 21. 在C++ 0x多线程中等待
- 22. 多线程的Java如何让线程等待一段时间
- 23. 处理器在等待主内存提取时做了什么
- 24. 多线程程序:等待输入
- 25. Delphi线程 - 在等待时冻结
- 26. 在更新Swing时等待线程
- 27. 多线程程序在状态等待时挂起
- 28. 为什么这些rspec测试“等待”?
- 29. 线程在C“等待父”
- 30. 线程和正在等待
我会考虑线程池,感谢 – Nmas
我看着成,但我不认为我将能够在汽车类中使用线程池而不是线程,主要是因为所有汽车都没有同时实例化。我有几个车库,里面有列表,里面是所有车辆“停放”的地方,这意味着我从每个车库开始新的Thread(car).start(),并且例如每个车库启动2辆新车,目的地另一个车库.. – Nmas
我的建议比仅用线程池替换线程的运行要深刻得多。你的设计将一个模拟实体(汽车)紧紧地绑定到一个线程上,这个设计从根本上来说是有缺陷的,没有一个有生产价值的系统就不敢这样设计。事实上,你可能根本不需要多线程---你需要像Swing,一个运行主事件调度循环的线程和事件处理程序中的所有代码。 –