全,
一个真正简单的方法是让一个程序同时做多件事,即使计算机不一定有多个“核心”。我可以通过创建多个线程来做到这一点吗?
我的目标是能够让两台计算机联网(通过Sockets)来响应对方的请求,同时我的程序将能够管理一个UI。我还希望服务器能够同时处理多个客户端。
我的理解是,通信是通过BufferedReader.readLine()和PrintWriter.println()完成的。我的问题是,我希望服务器等待多个readLine()请求,同时还在做其他事情。我该怎么处理呢?
非常感谢,
乔纳森
发布于 2010-04-01 23:50:48
是的,您可以通过在Java程序中拥有多个线程来实现这一点。
由于Java中的机制在执行此操作时会变得相当复杂,因此请参阅Java教程中的相应部分:
http://java.sun.com/docs/books/tutorial/essential/concurrency/
发布于 2010-04-01 23:49:38
看看这个页面:http://www.ashishmyles.com/tutorials/tcpchat/index.html --它很好地描述了线程、UI细节等,并给出了一个将两者合并在一起的聊天示例。
另外,考虑使用Apache MINA。它非常轻量级,不依赖于任何外部库(除了slf4j),并且使得从套接字中获取东西非常容易,而不需要在as循环中遍历,而且它也是非常非阻塞的(或者在需要的时候阻塞)。所以,你有一个实现IoHandler的类,然后你用一个接受器或其他Mina连接类注册它。然后,它会通知您何时接收到数据包。它以一种令人愉快的方式为你处理了所有通常会导致瘫痪的后端事务(例如,手动为客户端创建多个线程,然后管理这些线程)。
它还支持编解码器,您可以在其中转换发送和接收的消息。因此,假设您希望在连接的两端接收Java对象--这将为您完成转换。也许你也想把它们拉上拉链,让它更有效率?您也可以编写该代码,将其添加到对象编解码器下面的链中。
发布于 2010-04-01 23:50:02
可以,只要创建多个线程即可。无论处理器是否具有多个内核,它们都将并发运行。(对于单核,操作系统只是在某些点上暂停正在运行的线程的执行,并运行另一个线程一段时间,因此实际上,多个线程似乎正在同时运行)。
这里有一个很好的并发教程:http://java.sun.com/docs/books/tutorial/essential/concurrency/
https://stackoverflow.com/questions/2564332
复制相似问题