2011-07-20 9 views

答えて

2

ブライアンが言うように、マルチスレッドと並列性は巨大な領域であり、そして取得するよりも、それは間違って取得することが容易であること、右...

はあなたのコードの作業を取得するためには、あなたの」あなたはGroovyのを使用している場合

abstract class Actor implements Runnable { 
    synchronized void proceed() { notify() } 
    synchronized void pause() { wait() } 
} 

class MyActor extends Actor { 
    void run() { 
    println "hi" 
    pause() 
    println "hi again" 
    } 
} 


def theactor = new MyActor()    // Create an instance of MyActor 
def actorThread = new Thread(theactor) // Create a Thread to run this instance in 
actorThread.start()      // Thread.start() will call MyActor.run() 
Thread.sleep(500)      // Make the main thread go to sleep for some time so we know the actor class is waiting 
theactor.proceed()      // Then call proceed on the actor 
actorThread.join()      // Wait for the thread containing theactor to terminate 

しかし、私は真剣にGroovyのに並行性をもたらし、本当に自分の作品を知っている人々によって書かれているa framework like Gparsを使用することを検討します:dがこのような何かを持っている必要があります。私はこのようなコードの任意の一時停止を許可するものは考えられません...あなたのコードを代わりに使用パターンの1つに合わせるように設計することはできますか?

+1

私がやっていることは、ゲームのスクリプトNPCを作ることです。プレイヤーがNPCとやりとりするとき、私は進行機能をトリガーします。 Gparsへのリンクありがとうございました。私はそれを調べます。 –

+0

私はこの章[Actors on here](http://www.gpars.org/guide/guide/5.%20Actors.html)を見ています。俳優が潜在的なトイザランド+あなたがゲームに必要なかもしれないかもしれないどのように拡大するかを確かめないでください? [メーリングリスト](http://xircles.codehaus.org/lists/[email protected])で質問する価値がありますか? –

+0

nice answer tim :) –

2

スレッディングは大きな話題であり、スレッドAPIを直接操作することなく多くの一般的なことを行うためのJavaにライブラリがあります。 'Fire and Forget'の簡単な例の1つはTimerです。

しかし、あなたの直接の質問に答えてください。別のスレッドが続行するようスレッドに通知する必要があります。待ち時間のdocs()

は、別のスレッドが 通知()メソッドまたはこのオブジェクトののnotifyAll()メソッドを呼び出すまで、現在のスレッドを待機させを参照してください。 という単語では、このメソッドは単に wait(0)という呼び出しを実行する場合とまったく同じように動作します。

単純な「修正」は、あなたの探索を続けるためにあなたの待ち時間に一定の期間を追加することです。私は本「Java Concurrency in Practice」を提案します。

synchronized void pause() { 
     //wait 5 seconds before resuming. 
     wait(5000) 
    } 
関連する問題