Jak programowo generować zakleszczenie w Javie i jak analizować zakleszczenie?

Opublikowany: 2013-07-03

Przykład blokady wątków Java autorstwa Crunchify

Zakleszczenie to sytuacja programistyczna, w której dwa lub więcej wątków jest zablokowanych na zawsze, ta sytuacja pojawia się przy co najmniej dwóch wątkach i dwóch lub więcej zasobach.

Tutaj napisałem prosty program, który spowoduje zakleszczenie scenariusza, a potem zobaczymy, jak go przeanalizować.

Oto prosty przykład Javy:

Wyjście:

Gdy Twoja aplikacja się zawiesza, jak w powyższym przykładzie, możesz uzyskać zrzut wątku i zobaczyć zablokowane wątki.

Na przykład na Macu możesz użyć Ctrl-\ lub po prostu użyć jstack i identyfikatora procesu, aby uzyskać zrzut wątku, co czyni bardzo oczywistym, gdzie jest zakleszczenie.

W tym przykładzie zrzut wątku wygląda tak:

Zauważyłem tutaj threads => Deadlock Sytuacja zakleszczenia tutaj.. W następnym przykładzie przedstawimy prosty program Java do programowego wygenerowania powyższego zrzutu wątku.