我正在尝试在当前运行的线程的run方法中创建一个新线程。但是新线程没有开始,它阻止了当前正在运行的线程的执行。
运行当前运行线程的方法。
public void run() {
while(true){
try{
Message message = (Message)objIn.readObject();
System.out.println("Received msg:"+message);
if(message.type.equals("connection")){
if(message.content.equals("true")){
System.out.println("connection successful");
InetAddress senderIp = message.senderIp;
InetAddress receiverIp = message.receiverIp;
System.err.println(senderIp+"------"+receiverIp);
if(senderIp.getHostAddress().equals(receiverIp.getHostAddress())){
//first member of ring topology
System.err.println("first member");
}else{
System.err.println("not the first member");
ClientSideTempClient clientTemp = new ClientSideTempClient(receiverIp);
Thread obj1 = new Thread(clientTemp);
obj1.start();
System.out.println("after starting local client tread...");
}
}else{
System.out.println("something went wrong");
}
}
}catch(Exception e){
System.out.println("Exception:"+e);
}
}
}
新线程的类: 的 ClientSideTempClient.java
public class ClientSideTempClient implements Runnable{
public Socket socket;
public ObjectInputStream objIn;
public ObjectOutputStream objOut;
public ClientSideTempClient(InetAddress serverIp){
try{
System.err.println("trying to connect"+serverIp.getHostAddress());
String ipAddress = serverIp.getHostAddress();
socket = new Socket(ipAddress, 9010);
objOut = new ObjectOutputStream(socket.getOutputStream());
objOut.flush();
objIn = new ObjectInputStream(socket.getInputStream());
}catch(Exception e){
System.err.println("Exception in ClientSideTempClient"+e);
}
}
public void sendMessageToLocalServer(Message msg){
try {
objOut.writeObject(msg);
objOut.flush();
System.out.println("Outgoing : "+msg.toString());
}catch(Exception e){
System.out.println("Exception in chatroom_client:"+e);
}
}
@Override
public void run() {
While(true){
System.out.println("Execution started here");
}
}
}
我在谷歌搜索了相关答案的数量,但我没有得到它的解决方案。任何人都可以指导我解决这个问题吗?
答案 0 :(得分:0)
您的ClientSideTempClient
类在其构造函数中创建并连接Socket
,这会延迟您的循环。 Socket
和对象流应该在自己的run()
方法中创建,即在自己的线程上创建。
注意:如果你得到它,你必须抓住EOFException
并突破那个循环。大多数其他IOExceptions
也是致命的,除了SocketTimeoutException.