Implementierung von Java -gleichzeitiger Programmierung begrenzter Cache
1. Basisklasse des begrenzten Cache
Paket cn.xf.cp.ch14;/** * Funktion: Begrenzte Cache implementiert die Basisklasse * Zeit: 14:20:00 Uhr * Datei: BaseBoundbuffer.java * @Autor Administrator * * @param <V> */public class BasisBoundbuffer <V> {private endgültige endgültige v [] buf; privates Int -Schwanz; privater Int -Kopf; private Int Count; public baseboundBuffer (int Kapazität) {// Initialisieren Sie das Array this.buf = (v []) neues Objekt [Kapazität]; } // In eine Daten einfügen, kann die endgültige Methode nicht umgeschrieben werden. Synchronisierte endgültige void -doput (v v) {buf [tail] = v; if (++ Tail == buf.length) {Tail = 0; } // eine Methode einfügen, Gesamtmenge ++ ++. Zählung; } / *** eine Daten herausnehmen* @return* / Protected Synchronisierte final v dotake () {v v = buf [head]; Buf [Kopf] = NULL; if (++ head == buf.length) {head = 0; } --zählen; Rückkehr v; } // Bestimmen Sie durch die Beurteilung der Anzahl, ob das Array die vollständige öffentliche synchronisierte endgültige boolean isfifl () {return count == buf.length; } public synchronisierte endgültige boolean isEmpty () {return count == 0; }}2. Bestimmen Sie die Voraussetzungen, bevor Sie den Vorgang ausführen
Paket cn.xf.cp.ch14;/*** Funktion: Überprüfen Sie die Einfügung und erhalten Sie zuerst Elementvorgänge und führen Sie dann den Vorgang aus. Die Überprüfung erfolgt nicht und dürfte nicht arbeiten * Zeit: 2:33:41 Uhr * Datei: GrumpyBoundBuffer.java * @Autor Administrator * * @param <v> */public class GrumpyBoundbuffer <V> erweitert Basisbuffer <v> {public GrumpybufferBuffer (intgröße) {super (signific) {signific); } public synchronisierte void put (v v) löst eine Ausnahme aus {// Wenn es sich um eine vollständige Warteschlange handelt, kann das neue Element nicht eingefügt werden, wenn (isfull ()) {neue Ausnahme werfen ("Qule überschreitet"); } this.doput (v); } // In ähnlicher Weise kann das neue Element, wenn die Warteschlange leer ist, nicht abgerufen werden. } return this.dotake (); }}3.. Erreichen
Paket cn.xf.cp.ch14;/** *Funktion: Implementieren Sie einfache Blockierung durch Pollierung und Winterschlaf *Zeit: 14:55:54 PM *Datei: SleepyNedBuffer.java * @Autor Administrator * *@param <v> */Public Class SleepyBoundbuffer <V. public SleepyBoundBuffer (int Kapazität) {Super (Kapazität); } // Wenn die Warteschlange öffentliche void put (v v) in die Warteschlange auswirft {while (true) {// Die Schleife ist hier nicht gesperrt, sonst wird das Schloss nicht veröffentlicht. Wenn der Winterschlaf nicht verschlossen ist, ist der Schlaf verschlossen und andere können sie während des Winterschlafs nicht bedienen. Es ist unmöglich, dass ein Element synchronisiert wird (this) {// Wenn die Warteschlange nicht voll ist, dann setzen Sie das Element if (! This.isfull ()) {this.doput (v); zurückkehren; }} // sonst schlafen und beenden Sie die CPU, um Faden zu besetzen. }} public v take () löscht InterruptedException {while (true) {// Die Schleife ist hier nicht gesperrt, andernfalls wird das Schloss nicht veröffentlicht. Wenn der Schlaf nicht verschlossen ist, ist der Schlaf verschlossen und andere können sie beim Schlafen nicht bedienen. Es wird niemals neue Elemente geben, die synchronisiert sind (this) {// Wenn der Array -Teil leer ist, können die Daten abgerufen werden, wenn (! IsEmpty ()) {return this.dotake (); } // Wenn die Warteschlange leer ist, versuchen Sie, einige Sekunden lang wieder zu schlafen} Thread.sleep (sleep_granularity); }}}4. Bedingte Warteschlange
Paket cn.xf.cp.ch14;/** * Funktion: Verwenden Sie die Bedingungswarteschlange * Zeit: 3:32:04 PM * Datei: BoundedBuffer.java * @Autor Administrator * * @param <v> */public class bodedbuffer <v> baseBoundbuffer <V> {public begrenzte Grenze (int. } /** * Datenelemente einlegen * @param v * @throws interruptedException * /public synchronisierte void put (v v) löst InterruptedException aus {while (this.isfull ()) {// das Programm hier aussetzen und das Schloss wird veröffentlicht. } // Wenn die Warteschlange nicht voll ist, wird das Programm geweckt und das Schloss wird wiedererlangt. Doput (v); // Die Ausführung endet und wacht andere Warteschlangen auf. Notifyall (); } public synchronized v take () löst InterruptedException aus {while (this.isempty ()) {this.wait (); } V v = this.dotake (); this.notifyall (); Rückkehr v; }}Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!