イベントループスレッドとしてスレッドを使用したいと思います。私は、 "QThreadのような振る舞い"(以下の例ではt2
)のJavaスレッドを意味します。説明:イベントループスレッドとしてのJavaスレッド
私はスレッドt1
(メインスレッド)とスレッドt2
(ワーカースレッド)を持っています。 は、t1
から呼び出され、t2
スレッドで実行されます。
現在、私は(それが動作しますが、私はそれを好きではない)、このコードを作った:
- スレッドT1(例えばメインスレッド、UIスレッド):
//...
// Here, I want to call "method()" in t2's thread
Runnable event = new Runnable() {
@Override
public void run()
{
t2.method(param);
}
};
t2.postEvent(event);
//...
を - スレッドT2:
//...
Queue<Runnable> eventLoopQueue = new ConcurrentLinkedQueue<Runnable>();
//...
@Override
public void run()
{
//...
Runnable currentEvent = null;
while (!bMustStop) {
while ((currentEvent = eventLoopQueue.poll()) != null) {
currentEvent.run();
}
}
//...
}
public void method(Param param)
{
/* code that should be executed in t2's thread */
}
public void postEvent(Runnable event)
{
eventLoopQueue.offer(event);
}
このソリューションは醜いです。私はt2
の "always-working"メインループが好きではなく、のたびに新しいRunnable
が割り振られています...私のプログラムはmethod
のように40回/秒のようなものを呼び出すことができます。私は、Android上で使用されるべき解決策を探しています
はあまりにも(私は、AndroidのためのクラスLooperを知っているが、それは、唯一のAndroidのためのとても不可能だ)