Die Codekopie lautet wie folgt:
Paket com.yao;
import Java.util.concurrent.executorService;
import Java.util.concurrent.executors;
Import Java.util.Concurrent.Semaphor;
/**
* 4 neue Synchronisationsgeräte zur Koordinierung von Inter-Thread-Prozessen werden in Java 5.0 hinzugefügt, nämlich:
* Semaphore, Countdownlatch, Cyclicbarrier und Austauscher.
* In diesem Beispiel wird hauptsächlich Semaphor vorgestellt.
* Semaphor ist ein Tool, das zum Verwalten eines Ressourcenpools verwendet wird, das als Pass angesehen werden kann.
* Wenn ein Thread Ressourcen aus dem Ressourcenpool erhalten möchte, muss er zunächst einen Pass erhalten.
* Wenn der Thread den Durchgang nicht vorübergehend abrufen kann, wird der Thread blockiert und in einen Wartezustand eingegeben.
*/
öffentliche Klasse Mysemaphor erweitert Thread {
privat int i;
privates Semaphor -Semaphor;
public mysemaphor (int i, semaphore semaphore) {
this.i = i;
this.semaphore = semaphor;
}
public void run () {
if (semaphore.availablePerMits ()> 0) {
System.out.println (""+i+"Es gibt Räume:");
}anders{
System.out.println (""+i+"Warte, kein Platz");
}
versuchen {
semaphore.acquire ();
} catch (InterruptedException e) {
E. printstacktrace ();
}
System.out.println (""+i+"leerer Raum bekommen");
versuchen {
Thread.sleep ((int) math.random ()*10000);
} catch (InterruptedException e) {
E. printstacktrace ();
}
System.out.println (""+i+"vollständig verwendet");
semaphore.release ();
}
public static void main (String [] args) {
Semaphore Semaphore = New Semaphor (2);
ExecutorService Service = Executors.NewCachedThreadpool ();
für (int i = 0; i <10; i ++) {
service.execute (New Mysemaphor (ich, Semaphor));
}
service.shutdown ();
semaphor.acquireuninterriptable (2);
System.out.println ("verwendet, muss gereinigt werden");
semaphore.release (2);
}
}