私は、java.util.concurrency
パッケージに触発された独自の小さな並行性フレームワーク(学習目的のためだけに)を実行しました。これは、Callable/Futureメカニズムについてです。以下の私のコードは全体であり、コンパイル可能で非常に理解しやすいものです。
main thread
私の問題は、最初のスレッド( )が他のスレッドからのシグナルを待つデッドロックに遭遇することがあるということです。ただし、メインスレッドが待機状態になる前に、他のスレッドはすでにメインスレッドに通知しているため、メインスレッドはウェイクアップできません。
FutureTask.get()
常に前 FutureTask.run()
に実行する必要がありますが、run()メソッド(によって呼び出されるnew thread
)がget()メソッド(によって呼び出される)の前に実行される場合がありmain thread
ます。どうすればそれを防ぐことができるのかわかりません。
これは、2つのスレッドを実行する方法の擬似コードです。
//From main thread:
Executor.submit().get() (in get() the main thread waits for new thread to notify)
->submit() calls Executor.execute(FutureTask object)
-> execute() starts new thread
-> new thread shall notify `main thread`
新しいスレッドが実際に新しいスレッドを開始するメインスレッドよりも速く起動して実行される方法を理解できません。