Frage: Im Prinzip für zwei Clients zeigt der Server Nachrichten vom ersten Client und anschließend den zweiten Client nacheinander an, ohne dass mehrere Nachrichten angezeigt werden vom ersten Client dann sagen Sie eine Nachricht vom zweiten Client.Client-Threads und Server, Server zeigt die Nachricht von Client 1 an, dann die Nachricht von Client 2 und dann 1 usw.
Erwartetes Ergebnis: Es können so viele Nachrichten wie möglich auf einem Client gesendet werden, gefolgt von einer anderen Anzahl von Nachrichten auf dem zweiten Client.
Schritte unternommen, um zu versuchen, Probleme zu lösen:
- an wenigen Standorten auf Deadlocks Sah, nicht sicher, ob dies ist das gleiche.
- versucht zuerst, dann die Output die Input bekommen Sekunde, um den Client zu ändern, um den Server umgekehrt
- betrachtet von .filter auf die Lambda-Syntax Loswerden
Schritte zum Reproduzieren des Problems:
- Last up Server
- Last up Client 1
- Last up Client 2
- Nachricht auf dem Client 1
- Nachricht auf dem Client 1
- Nachricht auf Client 2
- Als Ergebnis nur eine Nachricht von jedem Client angezeigt wird
⠀
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 Link für Projekt: https://github.com/Runite618/ChatRoomVers2/commits/multiThreading
Danke fürs Lesen und für irgendwelche Antworten.
Matthäus.
Also nur wenn eine Nachricht von allen Clients verfügbar ist, sollte eine nächste Runde von Nachrichten gedruckt werden? – bowmore
Sagen Client 1 gibt 2 Nachrichten ein, Client 2 gibt 1 Nachricht ein, Server zeigt nur erste Nachricht von Client 1 und die Nachricht von Client 2 an. –