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