0

我的应用程序如下所示:

public class Server {
    private InititationServer initServer;
    private ArrayList<Socket> workerSockets;

    public Server() {
        workerSockets = new ArrayList<Socket>();
        initServer = new InitiationServer();
        (new Thread(initServer)).start();
    }

    public static void main(String[] args) {
        new Server();
    }

    //...
}

public class InitiationServer implements Runnable {
    private ServerSocket initSocket;

    //...

    public void run()
        while (true) {
            Socket workerSocket = initSocket.accept();
            // Add workerSocket to Server.workerSockets
        }
    }

    //...
}

InititationServer 在 run() 中实现 Runnable 和 ServerSocket.accept() 的传入 Socket。如何以线程安全的方式将这些接受的套接字传递回 Server.workerSockets?

任何帮助深表感谢。

4

1 回答 1

0

您可以使用CopyOnWriteArrayListforworkerSockets而不是ArrayList,因为它是线程安全的。

或者您可以使用workerSockets = Collections.synchronizedList(workerSockets);您的列表将是线程安全的,但我建议您使用第一种方法而不是第二种方法。

CopyOnWriteArrayList

Collections.synchronizedList

于 2013-11-07T08:41:28.407 回答