В самом условии: есть гостиница с номерами; клиент приходит, заселяется в номер или ждет пока освободится, если все занято. Какое-то время живет в номере, а потом его освобождает. Каждый клиент - это отдельный поток. Написал программу, но не пойму как описать 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();
}
}
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости