Задача на потоки

227
24 октября 2017, 00:00

В самом условии: есть гостиница с номерами; клиент приходит, заселяется в номер или ждет пока освободится, если все занято. Какое-то время живет в номере, а потом его освобождает. Каждый клиент - это отдельный поток. Написал программу, но не пойму как описать main. Помогите пожалуйста сделать правильно.

import java.util.concurrent.TimeUnit;
import java.util.*;
import java.util.concurrent.*;
public class Hotel
{
    private boolean taken = false;
    public synchronized 
        void take() throws InterruptedException 
    {
        while(taken)
            wait();
        taken = true;
    }
    public synchronized void free()
    {
        taken = false;
        notifyAll();
    }
}
class Client implements Runnable
{
    private Hotel room;
    private final int id;
    private final int live;
    private Random rand = new Random(50);
    private void pause() throws InterruptedException
    {
        if(live==0) return;
        TimeUnit.MILLISECONDS.sleep(rand.nextInt(live*250));
    }
    public Client(Hotel room, int ident, int l)
    {
        this.room = room;
        id = ident;
        live = l;
    }
    public void run()
    {
        try
        {
            while(!Thread.interrupted())
            {
                System.out.println(this+" "+"freed");
                pause();
                System.out.println(this+" "+"settled");
                room.take();
                System.out.println(this+" "+"live");
                pause();
                room.free();
            }
        }
        catch(InterruptedException e)
        {
            System.out.println(this+" "+"exiting via interrupt");
        }
    }
    public String toString()
    {
        return "Client"+id;
    }
}
class Test
{
public static void main(String[] args)
    {
        Hotel h = new Hotel();
        for(int i=0; i<=50; i++)
        {
            Thread t = new Thread(new Client(h, i, 10));
            t.start();
        }
    }
}
READ ALSO
Как объявить несколько переменных @FXML

Как объявить несколько переменных @FXML

это не очень удобно, хотелось бы не повторять несколько раз @FXML

182
Автоматический приём звонка в Android

Автоматический приём звонка в Android

Каким образом в приложении (дайлер) можно автоматически отвечать на входящие звонки? Нахожу везде только методы индикации звонка

162
Можно ли упростить цикл, используя java 9 или java 8?

Можно ли упростить цикл, используя java 9 или java 8?

Можно ли как-то упростить этот цикл, используя java 9 или java 8?

169
EntityMapping add constraint

EntityMapping add constraint

ЗдравствуйтеПытаюсь строить EntityMapping в Spring boot

159