La copia del código es la siguiente:
paquete com.yao;
import java.util.concurrent.executorservice;
import java.util.concurrent.executors;
import java.util.concurrent.semaphore;
/**
* 4 Nuevos dispositivos de sincronización para la coordinación se agregan procesos entre subpuestas en Java 5.0, que son:
* Semaphore, CountdownLatch, Cyclicbarrier e intercambiador.
* Este ejemplo presenta principalmente semáforo.
* Semaphore es una herramienta utilizada para administrar un grupo de recursos, que puede considerarse como un pase.
* Si un hilo quiere obtener recursos del grupo de recursos, primero debe obtener un pase.
* Si el hilo no puede obtener el pase temporalmente, el hilo se bloqueará y ingresará a un estado de espera.
*/
clase pública mysemaphore extiende hilo {
privado int i;
semáforo privado semáforo;
public mysemaphore (int i, semáforo semáforo) {
this.i = i;
this.semaphore = Semaphore;
}
public void run () {
if (semaphore.availablePermits ()> 0) {
System.out.println (""+i+"Hay espacios disponibles:");
}demás{
System.out.println (""+i+"espera, sin espacio");
}
intentar {
Semaphore.acquire ();
} capt (interruptedException e) {
E.PrintStackTrace ();
}
System.out.println (""+i+"obtener espacio vacío");
intentar {
Thread.sleep ((int) math.random ()*10000);
} capt (interruptedException e) {
E.PrintStackTrace ();
}
System.out.println (""+i+"completamente usado");
Semaphore.Release ();
}
public static void main (string [] args) {
Semáforo semáforo = nuevo semáforo (2);
EjecutorService Service = Ejecutors.NewCachedThreadPool ();
para (int i = 0; i <10; i ++) {
servicio.Execute (nuevo MySeMaphore (i, semáforo));
}
servicio.shutdown ();
SEMAPHORE.ACQUIREUNINTERTURMABLE (2);
System.out.println ("usado, debe limpiarse");
Semaphore.lelease (2);
}
}