Java 执行器服务中的队列工作';s newFixedThreadPool()?
根据,它说了以下关于 公共静态执行器服务newFixedThreadPool(int-nThreads) 创建一个线程池,该线程池重用固定数量的操作线程 离开共享的无界队列。在任何时候,最多读取个线程 将是活动的处理任务。如果提交了其他任务 当所有线程都处于活动状态时,它们将在队列中等待,直到 线程是可用的。如果任何线程在运行期间由于故障而终止 在关闭前执行,如果需要,将替换一个新的 执行后续任务。池中的线程将一直存在到 它是显式关闭的 他们在谈论哪个队?如果我在多线程应用程序中不使用任何队列,如以下所示,该怎么办Java 执行器服务中的队列工作';s newFixedThreadPool()?,java,multithreading,queue,executorservice,threadpoolexecutor,Java,Multithreading,Queue,Executorservice,Threadpoolexecutor,根据,它说了以下关于 公共静态执行器服务newFixedThreadPool(int-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();
}
多线程度假.java
在这种情况下,我的第6个线程会发生什么情况?它会自动添加到该
未知队列中吗?或者线程池将终止,并且它将无法继续工作???如果您有5个线程,则决定运行一个最多可调用30个线程的循环,这些进程被放入队列并等待线程可用
您的第6个线程将等待以前提交的线程完成或取消
您已将ExecutorService服务
保留为最终服务,并且您正在为服务service=Executors分配新值。newFixedThreadPool(5)代码>在while循环中。不清楚你在做什么?@NamanGala抱歉,这是个错误,我想在评论中添加这一行,留下了。无论如何,我已经编辑了这个问题,并从ExecutorService中删除了final
。。。请现在回答。您必须从while循环中取出ExecutorService的初始化。@NamanGala这样做了,还有什么?谢谢你的帮助。如果你足够自信,我请求你写一个答案……我只是在帮你调试代码。现在您已经初始化了Fixed5线程的ExecutorService。现在做一件事,而不是使用whileforinfinite循环,您可以使用for循环执行它10次,并查看一次有多少线程处于活动状态。并尝试在多线程职业
构造函数和套接字中添加线程号,并向其中分配不同的线程号。在run方法中,您可以将sysout入口和出口与ID号一起显示。它将在哪里等待?这是主要问题吗?JVM内部是否提供了任何自动默认队列?请仔细解释一下你内心的想法。我需要内部解释。@asad”任务通过内部队列提交到池中,默认情况下,当活动任务多于“线程”LinkedBlockingQueue时,该队列会保存额外的任务。我做了一个System.out.println(executor.getQueue().getClass())。
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();
}
}
}