Кода -копия выглядит следующим образом:
пакет com.yao;
импортировать java.util.concurrent.executorservice;
импортировать java.util.concurrent.executors;
импортировать java.util.concurrent.semaphore;
/**
* 4 новые устройства синхронизации для координации межпоточных процессов добавляются в Java 5.0, которые являются:
* Semaphore, Countdownlatch, Cyclicbarrier и Trabanger.
* Этот пример в основном представляет семафор.
* Semaphore - это инструмент, используемый для управления пулом ресурсов, который можно рассматривать как проход.
* Если поток хочет получить ресурсы из пула ресурсов, он должен сначала получить проход.
* Если поток не может получить проход временно, поток будет заблокирован и введет состояние ожидания.
*/
открытый класс MySemaphore расширяет тему {
частный int i;
Частный семафор семафор;
public mysemaphore (int i, semaphore semaphore) {
this.i = i;
this.semaphore = semaphore;
}
public void run () {
if (semaphore.availablepermits ()> 0) {
System.out.println (""+i+"Есть места:");
}еще{
System.out.println (""+i+"ждать, нет места");
}
пытаться {
Semaphore.acquire ();
} catch (прерванная экспрессия e) {
e.printstacktrace ();
}
System.out.println (""+i+"получить пустое пространство");
пытаться {
Thread.sleep ((int) math.random ()*10000);
} catch (прерванная экспрессия e) {
e.printstacktrace ();
}
System.out.println (""+i+"полностью используется");
semaphore.release ();
}
public static void main (string [] args) {
Semaphore Semaphore = новый Semaphore (2);
Executorservice service = executors.newcachedthreadpool ();
для (int i = 0; i <10; i ++) {
Service.execute (новый MySemaphore (I, Semaphore));
}
service.shutdown ();
semaphore.acquireuninterbullablible (2);
System.out.println («Используется, нужно очистить»);
Semaphore.release (2);
}
}