多线程服务器:每个客户端连接一个线程

问题描述 投票:0回答:3

我有多线程java应用程序。我想知道这种方法是否正确。从我的主要方法中,我将启动两个线程。一个线程开始侦听传入的客户端连接(这是一个客户端-服务器应用程序)。一旦客户端与服务器连接,它就会启动一个新线程来处理客户端,并且这对于所有客户端连接都会继续。由主程序启动的另一个线程处理公共缓冲区中客户端收到的消息。

我的问题是: 主线程启动一个线程(服务器),这个线程又启动许多线程。这是正确的吗?

java multithreading
3个回答
1
投票

有问题。您的服务器上可能同时创建太多线程,您将面临 DOS(拒绝服务)。

我建议使用 java.util.concurrent.ExecutorService 实现。

例如:

Runnable yourRunnable;
ExecutorService executorService = Executors.newFixedThreadPool(50);
executorService.submit(yourRunnable);

0
投票

是的,主线程可以启动其他线程。如果父线程退出,子线程会运行,这是没有问题的。请使用主线程接受新连接,使用其他线程处理客户端请求,然后处理客户端线程应维护自己的输入输出流。


0
投票

您在这里使用了某种错误的方法......

主程序启动的另一个线程处理消息 由位于公共缓冲区中的客户端接收。

为什么要为所有客户端使用公共缓冲区?它是NOT线程安全的。

更好的方法:

处理客户端的线程也应该处理自己的缓冲区。因此,当任何客户端连接时创建新线程,并为每个客户端创建新的读写缓冲区。

© www.soinside.com 2019 - 2024. All rights reserved.