4 Situationen, in denen Java einen Deadlock verursacht
1. Cross Lock verursacht einen Programm-Deadlock: Beispielsweise hält Thread A die Sperre von R1 und wartet auf die Sperre von R2, und Thread B hält die Sperre von R2 und wartet auf die Sperre von R1 .
2. Unzureichender Speicher: Es gibt beispielsweise zwei Threads, T1 und T2, die 10 MB Speicher erhalten haben, und T2, die beide 30 MB Speicher benötigen, um zu funktionieren Der Speicher beträgt 10 MB. Auf diese Weise warten die beiden Threads darauf, dass sie Speicherressourcen freigeben.
3. Frage-und-Antwort-Datenaustausch: Der Server öffnet einen bestimmten Port und wartet darauf, dass der Client auf die Anfrage zugreift Der Server antwortet, während der Server darauf wartet, dass der Client eine Anfrage sendet.
4. Durch eine Endlosschleife verursachter Deadlock: Mit Tools wie jstack kann man den Deadlock nicht erkennen, aber die CPU-Auslastung ist hoch und es ist schwierig, Fehler zu beheben und zu reproduzieren.
Beispiele zum Thema Deadlock
public class Main { private final Object MUTEX_READ = new Object(); private final Object MUTEX_WRITE = new Object(); public void read(){ synchronized (MUTEX_READ){ synchronized (MUTEX_WRITE){ } } } public void write(){ synchronized (MUTEX_WRITE){ synchronized (MUTEX_READ){ } } } public static void main(String[] args) throws InterruptedException { Main m = new Main(); new Thread(()->{ while (true){ m.read(); } }).start(); new Thread(()->{ while (true){ m.write(); } }).start(); } }
Das obige ist der detaillierte Inhalt vonWelche Situationen können in Java zu einem Deadlock führen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!