Lock ist ein Tool zum Steuerelement mehrerer Threads, um auf gemeinsame Ressourcen zuzugreifen. Im Allgemeinen bietet das Schloss exklusive Besuche in gemeinsamen Ressourcen. Es gibt nur einen Thread, um ein Sperre gleichzeitig zu erhalten. Einige Schlösser können jedoch Interviews mit gemeinsamen Ressourcen wie ReadWriteLock (die Aufrechterhaltung eines Paares verwandter Schlösser, eines für den Lesevorgang und das andere für Schreibvorgänge) zulassen.
1. Lock bietet bedingungslose, runde, ausgelagte, zeitliche, unterbrechungsfreie Operationen für die Erfassung von Schloss, alle Verriegelung und Entsperrmethoden sind explizit.
öffentliche Schnittstelle Lock {void lock (); Modus boolean trylock (langfristig, Zeiteinheit) unterbrochene Unterbrechung;
2. Reentrantlock realisiert die Sperrgrenze im Vergleich zu synchronisierten REISMONSPLECKENLEITUNGEN FEEMALIBLISCHE FÜHLUNG FEEMER FELDERFAKTE FÜHREN AUSGABEN.
3. Die normative Form der Sperrschnittstelle erfordert die Freigabe lock.unlock (), um Lock.unlock () im endgültigen Block zu veröffentlichen. Wenn der Lock -Guard -Code außerhalb des Außenblocks außerhalb des Außenbereichs ist, wird er nie veröffentlicht.
Die folgende Simulationsschloss Verwendung: Angenommen, es gibt zwei Threads (Thread A, B -Thread) zum Aufrufen der Druckmethode (String -Name), Thread A ist für das Drucken der Zeichenfolge "Zhangsan" verantwortlich, und Thread B ist für das Drucken von 'Lisi verantwortlich 'String.
1. Beim Hinzufügen der FINT -Methode (String -Name) wurde der Thread A nicht ausgeführt, und der B -Thread hat begonnen, ausgeführt zu werden, hat der gedruckte Name die folgenden Probleme.
2. Wenn die Druckname -Methode zur Sperre hinzugefügt wird, wird die Methode (String -Name) ausgeführt, nachdem der A nach Abschluss der Ausführung abgeschlossen ist, um einen gegenseitigen Ausschluss- oder Synchronisationseffekt zu erzielen.
Paket com.ljq.test.thread; String [] args) {new LockTest (). ) {Try {thread.sleep (10);} catch (interruptedException e) {e.printstacktrace ();} haangsan ");}}}). @Override public void run () {while (true) {try {thread.sleep (10);} catch (InterruptedException e) {e.prin. . ; i <len; i ++) {System.out.print (name.charat (i));