Я пытаюсь имитировать какие-то «серверы». У меня есть класс под названием Server, который расширяет Thread. У меня есть цикл от 1 до 1 000 000 и внутри, если он зависит от количества серверов, я хочу начать новый поток каждый раз, когда он идет вокруг цикла, чтобы сервер подбирал «запрос», выполняет его и отметьте сервер занятым, а затем остановите этот сервер отметки потоков как не занятый и дождитесь новых «запросов».Java: Как начать другой поток одного и того же объекта?
В настоящее время я получаю java.lang.IllegalThreadStateException
и от того, что я прочитал, потому что я пытаюсь запустить тот же поток. Как я могу обойти это и реализовать то, что хочу?
Server.java
public class Server extends Thread
{
boolean isBusy = false;
int executionTime;
int serverId;
List<Request> requests = new ArrayList<Request>();
Request currentRequest;
public Server(int requiredServerId,int requiredExecutionTime)
{
this.serverId = requiredServerId;
this.executionTime = requiredExecutionTime;
}
@Override
public void run()
{
isBusy = true;
for(int time = 1; time <= executionTime; time++)
{
if(time == executionTime)
{
isBusy = false;
currentRequest.setFinish();
break;
}
}
}
public void fetch(Request request)
{
requests.add(request);
currentRequest = request;
}
}
Main.java
// Create Servers
List<Server> servers = new ArrayList<Server>();
for(int i = 0; i < numberOfServers; i++)
{
servers.add(new Server(i, executionTime));
}
// Create Queue
List<Integer> queue = new ArrayList<Integer>();
for(int time = 1; time <= runningTime; time++)
{
if(time % arrivalTime == 0)
{
if(queue.size() <= queueSize)
{
queue.add(time);
}
else
{
rejectedRequests += 1;
}
}
if(!queue.isEmpty())
{
for(Server server : servers)
{
if(server.isBusy == false)
{
Request request = new Request(queue.get(0));
queue.remove(0);
server.fetch(request);
server.start();
}
break;
}
}
}