0

对于这个学校作业,我需要使用 Java 线程模拟客户端服务器类型的应用程序(不需要套接字等)。我该怎么做呢?

我需要一种方法来启动服务器并等待客户端调用它,然后它应该返回响应。我心中的“API”是这样的:

server.start()
client1.connect(server)
client2.connect(server)

x = client1.getData()
y = client2.getData()

success1 = client1.sendData(1)
success2 = client2.sendData(2)

server|client.run 方法看起来如何?假设我现在可以对方法调用进行硬编码。

4

2 回答 2

1

我建议使用以下方法:
1. 让“服务器”代码与阻塞队列一起使用 -
阻塞队列是一种同步的数据结构,让从中读取数据的线程(“消费者”线程)等到队列中有要读取的数据。
“生产者”线程是在队列中“推送”数据的线程。
我建议您使用其中一种阻塞队列实现。
我还建议您阅读有关“消费者生产者”模式的更多信息。
阻塞队列还消除了多线程编程中不推荐的“忙等待”的需要。

于 2013-02-23T09:23:12.807 回答
0

根据您提供的描述,我可以建议您写一些类似的东西

1)有一个队列,所有客户端都可以放置消息。

2) 在像 while(true) 这样的无限循环中运行的服务器等待已放入队列中的新消息,如果找到,则对其进行处理并将其标记为已处理。

3)客户端线程的工作是创建消息并将它们放入队列中。并通知服务器新消息已添加到队列中,以便服务器可以知道新消息已到达进行处理。

为了让这个程序正常工作,我认为你需要学习 Thread 的 notify、notifyAll() 和 wait() 方法。所以基本上没有套接字你正在寻找它“线程间通信”。链接可以提供帮助。

希望这可以帮助。

于 2013-02-23T09:20:29.757 回答