Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Run方法在JAVA中创建新线程时被阻止_Java_Multithreading_Sockets - Fatal编程技术网

Run方法在JAVA中创建新线程时被阻止

Run方法在JAVA中创建新线程时被阻止,java,multithreading,sockets,Java,Multithreading,Sockets,我试图在当前正在运行的线程的run方法中创建一个新线程。但新线程尚未启动,它正在阻止当前正在运行的线程的执行 public void run() { while(true){ try{ Message message = (Message)objIn.readObject(); System.out.println("Received msg:"+message);

我试图在当前正在运行的线程的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);
            }
       }
}
当前正在运行的线程的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");
        }
    }
}

我在谷歌上搜索了很多相关的答案,但我没有找到答案。有谁能指导我解决这个问题吗?

您的
ClientSideTempClient
类在其构造函数中创建并连接
Socket
,这会延迟循环。
Socket
和对象流应该在其自己的
run()
方法中创建,即在其自己的线程上创建


注意:您必须捕获
EOFException
,如果得到它,就必须跳出该循环。除了SocketTimeoutException之外,大多数其他的
IOException
也是致命的。

是否编译:
而(true){
?是否每次都打印:
System.out.println(“此处开始执行”);
?你确定阻塞的不是构造函数吗?@HovercraftFullOfEels:它没有打印任何内容。@SotiriosDelimanolis:是的……构造函数中有些东西工作不正常……!@SotiriosDelimanolis:执行在objIn=new ObjectInputStream(socket.getInputStream())处停止;