首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExecutorService的newFixedThreadPool()?

ExecutorService的newFixedThreadPool()?
EN

Stack Overflow用户
提问于 2015-07-31 05:58:46
回答 1查看 2.2K关注 0票数 3

按照这个解释在Javadocs中给出的说法,它说的是

公共静态ExecutorService newFixedThreadPool(int nThreads)

创建一个线程池,该池重用在共享无界队列上操作的固定数量的线程。在任何时候,最多的nThreads线程都是活动的处理任务。如果在所有线程都处于活动状态时提交了其他任务,它们将在队列中等待,直到线程可用为止。如果任何线程由于在关闭之前的执行过程中失败而终止,那么如果需要执行后续任务,将有一个新线程代替它。池中的线程将存在,直到显式关闭为止。

他们在说什么队列?如果我在我的多线程应用程序中没有使用任何队列,如下面所示:

代码语言:javascript
复制
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

代码语言:javascript
复制
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个线程会发生什么,它是自动添加到那个unknown queue中,还是线程池将终止,而它将不能进一步运行??

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-31 06:14:05

如果您有5个线程,那么决定运行一个循环,该循环可以调用多达30个线程,这些进程被放入队列中,等待线程可用。

您的第6个线程将等待到以前提交的线程完成或被取消。

以前的职位。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31739044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档