java - 多个客户端连接服务器java

标签 java multithreading sockets reference

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

//...    
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作为一个论点。假设我有一个连接并且一个线程启动,接受的套接字作为参数传递给线程。在这种情况下,server如果我没记错的话应该作为引用。如果在第一个线程结束之前,serverSocket获取一个新连接并创建一个新套接字,这将更改 server 的值。这是否会影响第一个线程的执行,因为第一个线程将引用作为其参数,这意味着该引用的基础对象已更改?

我测试了该程序,它看起来运行良好。每个线程都不会受到彼此的影响,尽管它们的所有构造函数参数都是对同一对象的引用。这对我来说没有意义,希望有人能澄清。谢谢。

最佳答案

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

关于java - 多个客户端连接服务器java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46260642/

相关文章:

java - 使用java线程进行互斥

Python 以线程安全的方式在本地抑制警告

java - 如何在java中停止客户端套接字以监听服务器套接字

java - 在 Android 上使用 IP 地址连接 WiFi 打印机

java - 如何将 Hibernate 验证注释与枚举一起使用?

java - H2 控制台看不到 JAVA 创建的表

c - 跟踪数据包通过内核 (linux)

java - 将 Google App Engine 与 Javascript 客户端连接

.net - SynchronizationContext.Post() 是线程安全的吗?

Python Socket 编程(TCP 与 UDP)