Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
多客户端连接服务器java_Java_Multithreading_Sockets_Reference - Fatal编程技术网

多客户端连接服务器java

多客户端连接服务器java,java,multithreading,sockets,reference,Java,Multithreading,Sockets,Reference,有一个关于多个客户端连接一台服务器的问题。这是我的服务器端代码: //... ServerSocket serverSocket = null; try{ serverSocket = new ServerSocket(port); }catch(IOException e){ e.printStackTrace(); } Socket server = null;

有一个关于多个客户端连接一台服务器的问题。这是我的服务器端代码:

//...    
ServerSocket serverSocket = null;
        try{
            serverSocket = new ServerSocket(port);
        }catch(IOException e){
            e.printStackTrace();
        }
        Socket server = null;

        while(true){
            try{
                server = serverSocket.accept();
                new createdThread(server).start(); //This is a thread class specified somewhere else to handle the socket. 
            }catch(IOException e){
                e.printStackTrace();
            }
createdThread()
是一个将开始处理套接字的线程,它将
socket服务器
作为参数。假设我有一个连接,线程启动,接受的套接字作为参数传递给线程。在这种情况下,如果我没有错的话,
server
应该作为引用传递。如果在第一个线程结束之前,
serverSocket
获取新连接并创建新套接字,这将更改
server
的值。这是否会影响第一个线程的执行,因为第一个线程将引用作为其参数,这意味着该引用的底层对象已更改


我测试了这个程序,它似乎运行得很好。虽然每个线程的所有构造函数参数都是对同一对象的引用,但它们之间并没有相互影响。这对我来说没有意义,希望有人能澄清。谢谢

将服务器对象传递给
createdThread()
方法时,将创建对该对象的同一引用的第二个副本。请看“图1”。因此,当您在循环中更改服务器对象的值时,一个引用将丢失,但线程使用的方法中仍然存在第二个引用。

当服务器对象被传递到
createdThread()
方法时,将创建对它的同一引用的第二个副本。请看“图1”。因此,当您在循环中更改服务器对象的值时,一个引用丢失,但第二个引用仍然存在于线程使用的方法中

假设我有一个连接,线程启动,接受的套接字作为参数传递给线程

按价值计算。换句话说,通过复制

在这种情况下,如果我没有错的话,应该将服务器作为引用传递

作为对
套接字的引用的值

如果在第一个线程结束之前,serversocket获得一个新连接并创建一个新套接字,这将更改
server
的值

不,这将影响第一个线程的执行

没有

因为第一个线程将引用作为其参数

不,没有。它将引用的值作为其参数,并(大概)将其存储到另一个变量中。不是原始的
服务器
变量

意味着该引用的基础对象已更改

没有

假设我有一个连接,线程启动,接受的套接字作为参数传递给线程

按价值计算。换句话说,通过复制

在这种情况下,如果我没有错的话,应该将服务器作为引用传递

作为对
套接字的引用的值

如果在第一个线程结束之前,serversocket获得一个新连接并创建一个新套接字,这将更改
server
的值

不,这将影响第一个线程的执行

没有

因为第一个线程将引用作为其参数

不,没有。它将引用的值作为其参数,并(大概)将其存储到另一个变量中。不是原始的
服务器
变量

意味着该引用的基础对象已更改

否。

将创建同一引用的第二个副本。将创建同一引用的第二个副本。