В самом условии: есть гостиница с номерами; клиент приходит, заселяется в номер или ждет пока освободится, если все занято. Какое-то время живет в номере, а потом его освобождает. Каждый клиент - это отдельный поток. Написал программу, но не пойму как описать 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();
}
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
это не очень удобно, хотелось бы не повторять несколько раз @FXML
Каким образом в приложении (дайлер) можно автоматически отвечать на входящие звонки? Нахожу везде только методы индикации звонка
Можно ли как-то упростить этот цикл, используя java 9 или java 8?