【发布时间】:2011-05-19 04:13:46
【问题描述】:
我有一个处理来自多个客户端的登录的 java 服务器。服务器为每个 tcp/ip 套接字侦听器创建一个线程。数据库访问由服务器创建的另一个线程处理。
目前,我连接到服务器的客户端数量非常少(
特别是与数据库有关:此时每个客户端线程访问其服务器父级上的公共数据库线程并执行数据访问方法。我认为我应该做的是有某种消息队列,客户端线程可以将其数据请求放在上面,数据库线程会在它收到它时执行它。如果有数据要从数据访问调用返回,那么它可以将其放入队列中以供客户端线程获取。所有这些都不会影响主服务器代码或任何其他客户端线程。
因此,我认为我想实现一个异步消息队列,客户端线程可以在该队列上放置消息,而数据库线程将从中获取。这是正确的方法吗?任何我可以阅读的关于实施的想法和链接将不胜感激。
【问题讨论】:
-
不是答案,因此评论...您可能会想在“Java C10K 问题”上搜索 Google。基本上每个 TCP/IP 连接一个线程并没有像您所怀疑的那样切断它。您的问题不一定是您所写的“不断调用”,而是一旦客户端数量变高(如果您继续每个客户端使用一个线程),就会在大量线程之间不断交换。
-
如今阻塞 IO 可以很好地执行高达 10K 的线程。尤其是 Java 6。这不像以前那么严重了。
标签: java multithreading messages