Это часть моей программы. Я убежден, что этот класс, где мой код получает повесил трубку. Я использую тупик в 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("");
}
}
}
}
}
http://stackoverflow.com/help/how-to-ask – KevinDTimm
Я прочитал это. Мне просто нужна помощь в том, почему мой код висит. –
вы запираетесь в точно противоположном порядке в обоих потоках. скажем, оба выполняются, они оба фиксируют соответствующий врагX. теперь 'player2' владеет' enemy2', а 'player1' владеет' enemy1', поэтому вызывается синхронизированный println, они не могут быть выполнены, потому что OTHER-файл принадлежит этой блокировке, поэтому они оба ждут друг друга, чтобы освободить замки, которых они не могут. 'player2' пытается сделать' враг1', но должен ждать 'player1'. и игрок1 делает то же самое с врагом2 –