пример Semaphore:
Администратор ресторана следит за освобождением столиков и пускает посетителей поужинать.
public class SemaphoreExample {
public static void main(String[] args) {
Semaphore table = new Semaphore(2);
Person person = new Person(table, "Клиент №1");
Person person2 = new Person(table, "Клиент №2");
Person person3 = new Person(table, "Клиент №3");
Person person4 = new Person(table, "Клиент №4");
Person person5 = new Person(table, "Клиент №5");
Person person6 = new Person(table, "Клиент №6");
Person person7 = new Person(table, "Клиент №7");
Person person8 = new Person(table, "Клиент №8");
person.start();
person2.start();
person3.start();
person4.start();
person5.start();
person6.start();
person7.start();
person8.start();
}
}
class Person extends Thread {
private final Semaphore table;
Person(Semaphore table, String name) {
this.table = table;
this.setName(name);
}
@Override
public void run() {
System.out.println(this.getName() + " ожидает освобождения столика");
try {
table.acquire();
System.out.println(this.getName() + " кушает ");
sleep(5000);
System.out.println(this.getName() + " уходит");
table.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}