【发布时间】:2017-09-30 06:14:10
【问题描述】:
问题:基本上对于两个客户端,服务器显示来自第一个客户端的消息,然后是第二个客户端连续显示的消息,而不显示从第一个客户端键入的多条消息,然后说来自第二个客户端的一条消息。
预期结果:能够在一个客户端上发送尽可能多的消息,然后在第二个客户端上发送不同数量的消息。
尝试解决问题的步骤:
- 看了几个网站的死锁问题,不知道是不是同一个问题。
- 尝试将客户端更改为首先获取输入流,然后获取输出流,服务器则相反
- 着眼于摆脱 .filter 的 lambda 语法
重现问题的步骤:
- 加载服务器
- 加载客户端 1
- 加载客户端 2
- 客户端 1 上的消息
- 客户端 1 上的消息
- 客户端 2 上的消息
- 因此,每个客户端只显示一条消息
⠀
public class PrintLine extends Thread {
private ArrayList<ClientThread> al;
private Integer count;
public PrintLine(ArrayList<ClientThread> al, Integer count) {
this.al = al;
this.count = count;
}
@Override
public void run() {
boolean done = false;
List<ClientThread> lines = new ArrayList<ClientThread>();
while (!done) {
al.stream().filter(x -> x.sInput == x.sInput).map(x -> x.getSInput()).forEach(sInput -> {
try {
System.out.println(sInput.readUTF());
} catch (IOException ex) {
Logger.getLogger(PrintLine.class.getName()).log(Level.SEVERE, null, ex);
}
});
}
}
}
项目的 GitHub 链接:https://github.com/Runite618/ChatRoomVers2/commits/multiThreading
感谢您的阅读和任何回答。
马修。
【问题讨论】:
-
那么只有当一条消息从所有客户端都可用时,才应该打印下一轮消息?
-
假设客户端 1 输入 2 条消息,客户端 2 输入 1 条消息,服务器将只显示来自客户端 1 的第一条消息和来自客户端 2 的消息。
标签: java multithreading server client