Hallo,
hab hier ein minimales Grundgerüst eines Javaservers um mein Problem zu veranschaulichen.
Es geht darum, dass ich nicht ganz weiß wie ich mit dem BufferedReader/InputStream bei mehreren Threads umgehen soll. Beim Beispiel hab ich ein kleines sleep(5000) eingebaut, sobald während des sleeps mehrere Threads auf localhost:8000 zugreifen, werden diese Anfragen nur nacheinander, nicht aber parallel durchgeführt. Wird der BufferedReader nicht geöffnet, dann funktioniert die parallele Abarbeitung.
Liegt es evtl daran dass ich versuche, bei mehreren Anfragen mehrere Streams des selben Sockets zu öffnen? Hab echt keinen Plan... derzeit wartet wie gesagt das Prog immer, bis der Stream geschlossen wurde bevor der nächste Thread drankommt...
MiniServer.java:
MiniClient.java:
MiniClass.java:
Bin für jeden Hinweis dankbar!!
LG
hab hier ein minimales Grundgerüst eines Javaservers um mein Problem zu veranschaulichen.
Es geht darum, dass ich nicht ganz weiß wie ich mit dem BufferedReader/InputStream bei mehreren Threads umgehen soll. Beim Beispiel hab ich ein kleines sleep(5000) eingebaut, sobald während des sleeps mehrere Threads auf localhost:8000 zugreifen, werden diese Anfragen nur nacheinander, nicht aber parallel durchgeführt. Wird der BufferedReader nicht geöffnet, dann funktioniert die parallele Abarbeitung.
Liegt es evtl daran dass ich versuche, bei mehreren Anfragen mehrere Streams des selben Sockets zu öffnen? Hab echt keinen Plan... derzeit wartet wie gesagt das Prog immer, bis der Stream geschlossen wurde bevor der nächste Thread drankommt...
MiniServer.java:
Java:
package miniexample;
import java.io.*;
import java.net.*;
public class MiniServer {
private static ServerSocket serverSocket;
public static void main(String[] args) throws IOException, Exception {
int port = 8000;
serverSocket = new ServerSocket(port);
while (true) {
try {
Socket clientSocket = serverSocket.accept();
System.out.println("New Client: " + clientSocket.getPort());
MiniClient clientThread = new MiniClient(clientSocket);
clientThread.startClient();
} catch (Exception e) {
System.out.println(e);
}}}}
MiniClient.java:
Java:
package miniexample;
import java.io.IOException;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class MiniClient extends Thread {
private Socket socket;
public MiniClient(Socket incClient) {
socket = incClient;
}
public void startClient() {
start();
}
@Override
public void run() {
MiniClass myMiniClass = new MiniClass();
try {
myMiniClass.streamSomething(this.socket);
} catch (InterruptedException | IOException ex) {
System.out.println("Exception: " + ex);
}
}
}
MiniClass.java:
Java:
package miniexample;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class MiniClass {
private Socket socket;
BufferedReader clientOut;
MiniClass() {
}
public void streamSomething(Socket incSocket) throws IOException, InterruptedException {
this.socket = incSocket;
clientOut = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
try {
clientOut = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String firstLine = clientOut.readLine();
doSomething(socket.getPort());
} finally {
clientOut.close();
}
}
public void doSomething(long threadID) throws InterruptedException {
System.out.println("Hello Thread No. " + threadID);
System.out.println("I'm starting to sleep now");
Thread.sleep(5000);
System.out.println("Woke up!");
}
}
Bin für jeden Hinweis dankbar!!
LG