In diesem Artikel werden zwei Fesseln für die Multi-Threading-Implementierung mehrerer Fensterticketing-Probleme vorgestellt, nämlich synchronisiert, lock () und entsperr ()
Der spezifische Code lautet wie folgt:
Der erste Typ:
Paket runnable; import Java.util.concurrent.locks.lock; import Java.util.concurrent.locks.reentrantlock; / * * Synchronisation * Es gibt zwei Möglichkeiten zum Sperren * hier: * 1.synchronized * 2.Lock () und entsplock () */ öffentliche Klasse Myrunnable Geräte Runnable {private int tickets = 100; // Lock Private Lock Lock = New Reentrantlock () definieren; public void run () {while (true) {// lock lock.lock (); if (Tickets> 0) {try {thread.sleep (100); } catch (InterruptedException e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); } System.out.println (Thread.currentThread (). GetName () + "verkauft" + (Tickets--) + "Tickets"); } lock.unlock (); }}}Ergebnis:
Der zweite Typ:
Paket runnable; / * * Synchronisierte * Es gibt zwei Möglichkeiten zum Sperren * hier: * 1.synchronized * 2.Lock () und entsplock () */ öffentliche Klasse Myrunnable Geräte Runnable {private int tickets = 100; public void run () {while (true) {synchronized (this) {if (Tickets> 0) {try {thread.sleep (100); } catch (InterruptedException e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); } System.out.println (Thread.currentThread (). GetName () + "verkauft" + (Tickets--) + "Tickets"); }}}}}Ergebnis:
Paket runnable; public class runnabledemo {public static void main (String [] args) {Myrunnable Myrunnable = new Myrunnable (); Thread T1 = neuer Thread (Myrunnable, "Fenster eins"); Thread T2 = neuer Thread (Myrunnable, "Fenster zwei"); Thread T3 = neuer Thread (Myrunnable, "Fenster drei"); t1.start (); t2.Start (); t3.Start (); }}Ich weiß nicht, ob es ein Zufall oder so war, aber als ich diese beiden kleinen Fälle mit mehreren Threaden ausführte, steckte der Computer plötzlich fest und ich schaltete schnell die Sonnenfinsternis aus.
Es gibt Aussagen über die Beendigung des Prozesses und wurden nicht hinzugefügt. Bitte beachten Sie ihn selbst.
Das obige ist der gesamte Inhalt dieses Artikels über das Beispiel für das Java Multi-Thread-Fensterticketing-Problem. Ich hoffe, es wird für das Vorgehen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie bitte eine Nachricht und freuen Sie sich auf Ihre wertvollen Kommentare.