我有一个程序,它基本上有一个单元矩阵(共享内存)和汽车(可观察线程)。在每次移动之前,每辆车都请求访问下一个单元格,如果下一个单元格被阻塞,它会进入一个调用 wait() 的同步块,线程进入睡眠状态。我想知道是否有任何方法可以让汽车在等待()时做一些事情,然后当他收到通知时,他可以继续做他在等待之前所做的事情。
2 回答
你将不得不重新设计:不要用螺纹建模汽车。让线程池执行任何需要的任务,并使用带有回调函数的异步模型来指导汽车的行为。如果一个单元被阻塞,汽车的状态根本不会改变,线程池可以做其他事情。当单元被释放时,触发适当的回调,它将更新任务提交到池。
我做了一些类似于你描述的事情,使用Handler
s 进行2路线程通信。
child/worker/'car' 线程确实工作,进入睡眠一段时间(~100ms),醒来时检查线程类成员变量的状态变化。
父线程会向
Handler
工作线程发送消息,工作线程接收命令并设置工作线程类中的成员变量,以便在工作人员下次退出睡眠时进行检测。
以下是我一直在查看的链接,以掌握如何使用Handler
s 并有效地在线程之间进行通信:
线程 - 处理程序的很好的概述(没有活套)。带代码示例:http:
com.indy.testing.TestMain.java.MyThread.java
//indyvision.net/2010/02/android-threads-tutorial-part-3/线程 - 处理程序和循环器的概述 http://techtej.blogspot.com/2011/02/android-passing-data-between-main.html
带 2way 通信的线程。带代码示例:sample.thread.messaging.ThreadMessaging.java http://codinghard.wordpress.com/2009/05/16/android-thread-messaging/