Согласно this explanation given in Javadocs, он говорит следующее оРабота очереди в newFixedThreadPool()?
общественного статического ExecutorService newFixedThreadPool (INT nThreads)
Создает пул потоков, который повторно использует фиксированное количество потоков, работающие выкл общая неограниченную очередь. В любой момент, в большинстве случаев nThreads будут активными задачами обработки. Если дополнительные задачи отправляются , когда все потоки активны, они будут ждать в очереди до тех пор, пока не появится поток . Если какой-либо поток завершается из-за сбоя во время выполнения до выключения, новый новый будет заменен на место для выполнения последующих задач. Потоки в пуле будут существовать до , он явно отключается.
В какой очереди они говорят? Что делать, если я не использую любой очереди в моем многопоточном приложении, как ниже:
ExecutorService service;
service=Executors.newFixedThreadPool(5);
while(true){
try {
s=ss.accept();
//new Thread(new MultithreadedInvocation(s)).start();
service.submit(new MultithreadedInvocation(s)).get();
} catch (InterruptedException | ExecutionException ex) {
ex.printStackTrace();
}
MultithreadedInvocation.java
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class MultithreadedInvocation implements Runnable{
//initialize in const'r
private final Socket socket;
public MultithreadedInvocation(Socket s) {
this.socket=s;
}
@Override
public void run() {
try {
DataInputStream din=new DataInputStream(socket.getInputStream());
DataOutputStream dout=new DataOutputStream(socket.getOutputStream());
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int str;
str=din.read();
String name=din.readUTF();
System.out.println("Client Name = "+name);
System.out.println("Actual Client requested for file index "+str+".");
ClientInfo ci = new ClientInfo();
ci.ClientName=name;
ci.ClientFileChoice=str;
String fileName = new FileMapping().lookupFile(str);
File tempFile=new File("C:\\Users\\server-3\\Desktop\\List\\"+fileName);
dout.writeLong(tempFile.length());
dout.flush();
din.close();
dout.close();
socket.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Что будет с моим 6-нить в этом case, будет ли он автоматически добавлен к этому unknown queue
, или пул потоков завершится, и он не будет функционировать дальше?
Вы сохранили 'ExecutorService, как **' обслуживания окончательный **, а также вы присваиваете новые значения для обслуживания 'обслуживания = Executors.newFixedThreadPool (5)' в то время как цикл. Не ясно, что вы делаете? –
@ NamanGala-Извините, это была ошибка, и я хотел добавить эту строку в комментарии, оставил ее. В любом случае, я отредактировал вопрос и удалил «final» из ExecutorService ... Пожалуйста, ответьте сейчас. – asad
Вы должны выполнить инициализацию ExecutorService из цикла while. –