私は以下のコードの原因を調べようとしています。ここで、匿名の内部クラスを使用してスレッドを作成すると、デッドロック状態になりますが、ラムダ式では正常に動作します。私はこの行動の背後にある理由を見つけようとしましたが、できませんでした。匿名クラスと匿名の実行可能クラスコードを使用すると、デッドロック状態になりますが、ラムダでうまく動作します。
Hello guys!!!
Code finished...
:ラムダ式の出力と
public class ThreadCreationTest {
static {
new ThreadCreationTest();
}
private void call() {
System.out.println("Hello guys!!!");
}
public ThreadCreationTest() {
// when we use this thread it goes in deadlock kind of state
Thread thread1 = new Thread(new Runnable() {
public void run() {
call();
}
});
// This one works fine.
Thread thread = new Thread(() -> call());
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
public static void main(String... args) {
System.out.println("Code finished...");
}
}
code goes into deadlock state
を誰にも 'java.util.concurrent.Callable'のウサギの穴を下る前に名前を変更しても、それはまだ'起こります'' xcall'またはそれに類するものを呼び出します。 –
本当に素敵なパズル;)コールメソッドでプライベートアクセスモディファイアを削除すると問題は解決しますが、そのための曖昧な説明しかありません。 – meistermeier