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 は Runnable と ServerSocket.accept() の受信ソケットを run() に実装します。これらの受け入れられたソケットをスレッドセーフな方法で Server.workerSockets に戻すにはどうすればよいですか?

どんな助けでも大歓迎です。

4

1 に答える 1

0

スレッドセーフであるため、代わりにCopyOnWriteArrayListforを使用できます。workerSocketsArrayList

またはworkerSockets = Collections.synchronizedList(workerSockets);、リストを使用してスレッドセーフにすることもできますが、2 番目ではなく 1 番目の方法を使用することをお勧めします。

CopyOnWriteArrayList

Collections.synchronizedList

于 2013-11-07T08:41:28.407 に答える