【问题标题】:Java Client Server, Multi-threadingJava 客户端服务器,多线程
【发布时间】:2015-01-09 03:51:56
【问题描述】:

我目前正在编写一个客户端-服务器 JAVA 应用程序,但我有点卡住了。我在网上搜索了一些有用的代码。我找到了这个示例(我想在等待连接时使用它)但我真的不明白这段代码应该在做什么,有人可以帮忙吗? :)

Executor threadpool = Executors.newScheduledThreadPool(maxClients);

【问题讨论】:

  • 要等待客户端请求打开连接,您需要一个线程,该线程在循环中调用serversockect.accept()。你不需要线程池。要在连接打开后等待来自客户端的消息,可以使用线程池,但它比每个客户端使用单独的线程更复杂,并且当超过 maxClients 时,将接受额外的客户端连接但不处理。所以不要在你的服务器原型版本中使用线程池。

标签: java multithreading sockets client server


【解决方案1】:

Executor 接口和Executors 工厂帮助您使用线程池。

在您的情况下:您希望同时处理传入的客户端连接。所以你需要一个线程。因此,将任务提交给 Executor 是一种方便的方式,无需担心线程创建等问题。

所以这条线

Executor threadpool = Executors.newScheduledThreadPool(maxClients);

声明threadpool 是一个执行者(任务可以稍后提交),但你不关心哪个实现。 “=”的右侧然后使用 Factory 来检索 Executor 的实现之一的实例。在这种情况下,它是一个 ScheduledThreadPool,至少有 maxClients 线程在等待新任务。

在代码中它可能会像这样使用

threadpool.execute( new ClientHandler(socket) );

其中 ClientHandler 是一些实现 Runnable 的辅助类,用于处理与客户端的 IO。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 2011-04-28
    相关资源
    最近更新 更多