Explicación de clase auxiliar potente JUC --- >>> CyclicBarrier (luz de señal)

Principio:

Definimos dos operaciones en semáforos:
* adquirir (adquirir) Cuando un subproceso llama a la operación de adquisición, adquirirá con éxito el semáforo (semáforo menos 1),
* o esperará hasta que un subproceso libere el semáforo, O tiempo de espera.
* release (release) en realidad aumentará el valor del semáforo y luego despertará el hilo de espera.
*
* Los semáforos se usan principalmente para dos propósitos, uno es para el uso mutuamente exclusivo de múltiples recursos compartidos, y el otro es para el control del número de hilos concurrentes.

import java.util.Random;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit; 
 
/ ** 
 * 
 * @Description: TODO (en una oración para describir el papel de esta clase)   
 * 
 * en el semáforo Definimos dos operaciones anteriores: 
 * adquirir (adquisición) Cuando un subproceso llama a la operación de adquisición, adquirirá con éxito el semáforo (semáforo menos 1), 
 * o esperará hasta que un subproceso libere el semáforo o se agote el tiempo. 
 * release (release) en realidad aumentará el valor del semáforo y luego despertará el hilo de espera. 
 * 
 * Los semáforos se usan principalmente para dos propósitos, uno es para el uso mutuamente exclusivo de múltiples recursos compartidos, y el otro es para el control del número de hilos concurrentes. 
 * / 
public  class SemaphoreDemo 
{ 
  public  static  void main (String [] args) 
  { 
     Semaphore semaphore = new Semaphore (3);// Simulación de 3 espacios de estacionamiento 
     
     para ( int i = 1; i <= 6; i ++) // Simulación de 6 autos 
     {
        new Thread (() -> {
           try  
          { 
            semaphore.acquire (); 
            System.out.println ( Thread.currentThread (). GetName () + "\ t agarró el espacio de estacionamiento" ); 
            TimeUnit.SECONDS.sleep ( new Random (). NextInt (5 )); 
            System.out.println (Thread.currentThread (). GetName ( ) + "\ t ------- izquierda" ); 
          } catch (InterruptedException e) { 
            e.printStackTrace (); 
          } finalmente{ 
            semáforo.release (); 
          } 
       }, String.valueOf (i)). Start (); 
     } 
     
  } 
}
 

 

Supongo que te gusta

Origin www.cnblogs.com/cb1186512739/p/12738232.html
Recomendado
Clasificación