2015-03-16 2 views
7

Ich bin ein Anfänger und ich habe eine Aufgabe, eine grundlegende Chat-App von zwei Clients und einem Server Austausch Zeichenfolgen, die Ziel + Nachricht sind.Was könnte die Ursache für "langes Monitorkonflikt-Ereignis mit Eigentümermethode" sein?

Ich habe etwas Code geschrieben, aber wenn ich es verwende, bekomme ich dieses "lange Monitorkonkurrenz-Ereignis mit Eigentümermethode" am anderen Ende.

Kann mir jemand helfen, wie das passieren kann? Oder kann mir irgendjemand die Ursache dafür im Allgemeinen sagen?

+0

Hallo - diese Frage kam zu mir in der Review-Warteschlange, um zu versuchen, ihre Zuverlässigkeit zu verbessern. Sie müssen mehr Details hinzufügen, um diese Frage nützlicher und einfacher zu beantworten. Insbesondere - ein minimales, vollständiges und überprüfbares Beispiel (http://stackoverflow.com/help/mcve](http://stackoverflow.com/help/mcve)) würde hier sehr helfen. Sie werden vielleicht feststellen, dass Sie bei der Erstellung eines solchen Beispiels (indem Sie Ihren Code reduzieren, um ihn minimal zu halten) die Antwort für sich selbst preisgeben. –

+0

Laut meinem anderen Kommentar - Sie müssen wirklich einige Informationen hinzufügen, um diese Frage wirklich nützlich und in der Lage zu machen, vollständig beantwortet zu werden. Ich habe versucht, Sie in die richtige Richtung zu weisen - ich hoffe, Sie können etwas Code hinzufügen, wo ich gesetzt habe "Ich habe einen Code geschrieben". Andernfalls erhalten Sie nur generische Antworten, die Sie darauf hinweisen, warum dieser Fehler ausgelöst wurde. Sehen Sie sich neben dem MCVE-Link [Wie Sie fragen] (http://stackoverflow.com/questions/how-to-ask) an. Viel Glück! –

Antwort

13

Es wird von einem Thread verursacht, der einen Monitor/Mutex für eine lange Zeit hält und andere Threads blockiert. In diesem Fall beträgt "eine lange Zeit" 100 Millisekunden oder mehr. (This pull request ist, wo diese Prüfung hinzugefügt wurde.)

Es ist eine Warnung ... aber Sie würden es ratsam sein, es zu untersuchen, da es wahrscheinlich Ihre Anwendung nicht mehr reagiert.

Im Allgemeinen ist es das Heilmittel, die Zeitdauer zu reduzieren, die Ihre Anwendung benötigt, um Mutexe zu halten. Aber ohne Ihren Code zu sehen, ist es schwer zu sagen, wie Sie dies tun würden.

+0

Was genau meinst du mit Thread, der einen Monitor hält? – user3656629

+4

Zum Beispiel 'synchronized (lock) {/ * Thread hält Monitor auf Sperre * /}' –

Verwandte Themen