Главная

Java

Многопоточность

Synchronizers


пример 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();
        }
    }
}


Полезные ссылки: