gpt4 book ai didi

Java 线程池 - 线程正在更新吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:34:43 25 4
gpt4 key购买 nike

我的 Java.NIO 套接字服务器中有一个线程池。我有时会收到运行时错误,例如 Connection reset by peerBroken Pipe 等。

我的问题是:抛出异常时线程是否被杀死?如果是 - 是否在线程池中创建了一个新线程来代替被杀死的线程??

这是我的线程管理器:

import java.nio.channels.SocketChannel;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


public class ThreadsManager {

private ExecutorService threadPool = null;
private LiveConnectionsManager liveConnectionsManager;
private int threadPoolSize = 35; //number of tasks thread

public ThreadsManager(LiveConnectionsManager liveConnectionsManager) {
this.liveConnectionsManager = liveConnectionsManager;
threadPool = Executors.newFixedThreadPool(threadPoolSize);
ServerActions.threadPool = threadPool;
}

public void processNewMessage(SocketChannel socketChannel, Client client)
{
threadPool.execute(new MessagesProcessor(socketChannel, client, liveConnectionsManager));
}

public void closeConnection(SocketChannel socketChannel, Client client) {
threadPool.execute(new LogoutClient(socketChannel, client, null));
}
}

最佳答案

当您使用 ExecutorService 创建线程池时。

所以ExecutorService.newFixedThreadPool(..)确保线程数量在被任何异常/错误杀死时保持不变,并且有足够的任务等待线。下面来自 java 文档的文本清楚地说明了这一点:

直接来自 java 文档:newFixedThreadPool

创建一个线程池,该线程池重用固定数量的线程,这些线程在共享的无界队列中运行。 在任何时候,最多 nThreads 个线程将处于 Activity 状态处理任务。如果在所有线程都处于 Activity 状态时提交了额外的任务,它们将在队列中等待,直到有线程可用。如果任何线程在关闭之前的执行过程中因故障而终止,则如果需要执行后续任务,将有一个新线程取代它。池中的线程将一直存在,直到它被显式关闭。

http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool(int )

关于Java 线程池 - 线程正在更新吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14415104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com