A cópia do código é a seguinte:
pacote com.yao;
importar java.util.concurrent.executorService;
importar java.util.concurrent.executores;
importar java.util.concurrent.semaphore;
/**
* 4 Novos dispositivos de sincronização para coordenar processos entre thread são adicionados no Java 5.0, que são:
* Semáforo, Countdownlatch, CyclicBarrier e trocador.
* Este exemplo apresenta principalmente o semáforo.
* O semáforo é uma ferramenta usada para gerenciar um pool de recursos, que pode ser considerado um passe.
* Se um thread quiser obter recursos do pool de recursos, ele deve primeiro obter um passe.
* Se o thread não puder obter o passe temporariamente, o thread será bloqueado e inserido em um estado de espera.
*/
classe pública mysemaphore estende o tópico {
privado int i;
Semáforo privado semáforo;
public mysemaphore (int i, semáforo semáforo) {
this.i = i;
this.semaphore = semáforo;
}
public void run () {
if (semaphore.AvailablePermits ()> 0) {
System.out.println (""+i+"Existem espaços disponíveis:");
}outro{
System.out.println (""+i+"Espere, sem espaço");
}
tentar {
semaphore.acquire ();
} catch (interruptedException e) {
E.PrintStackTrace ();
}
System.out.println (""+i+"obtenha espaço vazio");
tentar {
Thread.sleep ((int) math.random ()*10000);
} catch (interruptedException e) {
E.PrintStackTrace ();
}
System.out.println (""+i+"completamente usado");
semaphore.release ();
}
public static void main (string [] args) {
Semaphore Semaphore = New Semaphore (2);
ExecutorService Service = executores.newcachedthreadpool ();
for (int i = 0; i <10; i ++) {
Service.Execute (New MySemaphore (i, semáforo));
}
Service.shutdown ();
semaphore.acquireuninterruptível (2);
System.out.println ("Usado, precisa ser limpo");
semaphore.release (2);
}
}