Javaでは、開発にマルチスレッドが含まれる場合、この時点でデッドロックの問題が発生しやすくなります。最初にデッドロックの問題が発生したときは、困惑し、問題を特定するのが困難になります。
Javaマルチスレッドに関しては、いくつかの問題が特に複雑になり、問題がデッドロックによるものであることがわかっていても、デッドロックが発生する理由を理解するのが難しいため、デッドロックの問題が発生すると、デッドロックを検出して表示する方法は?
Javaのjdkは、デッドロックの問題を見つけて分析するのに役立つ非常に便利なツールを提供します。
1.デッドロックの原因:2つ以上のスレッドが特定のリソースを相互に保持し、相互がリソースを解放するのを待つ場合、デッドロックはデッドロックです。
2.デッドロックシナリオを作成します。
public class Test {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
synchronized (B.class) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (A.class) {
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
synchronized (A.class) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (B.class) {
}
}
}
}).start();
}
}
class A {
}
class B {
}
実行時に、1つのスレッドがAリソースを保持し、Bリソースの使用を希望し、別のスレッドがBリソースを保持し、Aリソースの使用を希望すると、相互待機のデッドロックに陥り、デッドロックが形成されることがわかります。
3.Jconsoleビューのデッドロック
Javaインストールの場所を入力し、Jconsoleと入力して、インターフェイスをポップアップします(または、インストールディレクトリ/java/jdk1.70_80/bin/を入力し、Jconsole.exeをクリックします)。