gpt4 book ai didi

java - 我可以创建任意数量的线程吗?

转载 作者:行者123 更新时间:2023-12-01 16:33:36 27 4
gpt4 key购买 nike

我正在开发一个 REST Web 服务,该服务应该从客户端接收文件并对其进行处理。之后我收到文件,我想创建一个新线程来处理该文件,所以我没有义务等待处理函数结束。

如果我收到很多文件,我会创建很多线程。这样做有什么限制或危险吗?

最佳答案

If I am receiving a lot of files, I will create a lot of thread. Is there any limit or danger to do this?

是的,有。我不确定线程​​数量是否有限制,但在某些时候您将耗尽内存。每个线程都有堆栈和其他会加起来的本地存储。

如果达到限制,我会通过不接受新连接来限制您 fork 的线程数量。然后其他连接将在 TCP 队列中等待,直到先前的请求完成。

更好的机制可能是使用固定的 ExecutorService 线程池,而不是为每个请求 fork 一个新线程:

// create a thread pool with 10 workers
ExecutorService threadPool = Executors.newFixedThreadPool(10);
while(!shutdown) {
// receive a request from your service -- this is tricky
// process it using the thread pool
threadPool.submit(new MyRequest(...));
}
...
// once we have submitted all jobs to the thread pool, it should be shutdown
threadPool.shutdown();

其中棘手的部分是如何确定哪些连接可读。这需要 NIO 代码、 channel 选择器等来复用连接,您必须查看哪些连接可以被读取。

关于java - 我可以创建任意数量的线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11763001/

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