私は基本的にセル(共有メモリ)と車(監視可能なスレッド)のマトリックスを持つプログラムを持っています。各移動の前に、各車は次のセルへのアクセスを要求し、次のセルがブロックされると、wait()を呼び出す同期ブロックに入り、スレッドはスリープ状態になります。wait()をしている間に車に何かをさせる方法はないかと思っていたのですが、通知を受け取ったら、待つ前にやっていることを続けることができます。
2 に答える
再設計する必要があります。スレッドを使用して車をモデル化しないでください。スレッドプールに必要なタスクを実行させ、コールバック関数を備えた非同期モデルで車の動作をガイドします。セルがブロックされている場合、車の状態は変化せず、スレッドプールは他のことを行うことができます。セルが解放されたら、適切なコールバックを起動します。これにより、更新タスクがプールに送信されます。
Handler
双方向スレッド通信にsを使用して、あなたが説明したのと同様のことを行いました。
child / worker /'car'スレッドは機能し、設定された期間(〜100ms)スリープ状態になり、ウェイクアップ時にスレッドクラスのメンバー変数の状態の変化をチェックします。
親スレッドは
Handler
ワーカースレッドにメッセージを送信し、ワーカースレッドはコマンドを受信して、ワーカーがスリープを終了したときに検出されるように、ワーカースレッドクラスのメンバー変数を設定します。
以下は、sの使用方法を把握しHandler
、スレッド間で効果的に通信するために確認したリンクです。
スレッド-ハンドラーの概要(ルーパーなし)。コード例付き: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/