这是我的计划的一部分。我确信这个课程是我的代码挂断的地方。我在java
中使用死锁线程,我遇到了困难。
所以我不想显示我的整个代码,但这是一个示例。有人能告诉我它为什么挂?这种僵局让我感到困惑。
public class gameEnemyRelease {
private static Object enemy1 = new Object();
public static Object enemy2= new Object();
public static void main(String args[]) {
player1 p1 = new player1();
player2 p2 = new player2();
p1.start();
p2.start();
}
private static class player1 extends Thread {
public void run() {
synchronized (enemy1) {
System.out.println("Start Launch");
try { Thread.sleep(10); }
catch (InterruptedException e) {}
System.out.println("Waiting for enemy 2 to launch...");
synchronized (enemy2) {
System.out.println("Shot");
}
}
}
}
private static class player2 extends Thread {
public void run() {
synchronized (enemy2) {
System.out.println("...");
try { Thread.sleep(10); }
catch (InterruptedException e) {}
System.out.println("");
synchronized (enemy1) {
System.out.println("");
}
}
}
}
}
答案 0 :(得分:6)
您的程序挂起可能是因为两个线程都没有继续进行并等待彼此释放锁定。所以你可以尝试改变这个方法;请尝试以下代码:
private static class player2 extends Thread {
public void run() {
synchronized (enemy1) {
System.out.println("...");
try { Thread.sleep(10); }
catch (InterruptedException e) {}
System.out.println("");
synchronized (enemy2) {
System.out.println("");
}
}
答案 1 :(得分:4)
考虑一下这段代码:
你需要解决并且可能从一开始就锁定两个敌人。