gpt4 book ai didi

java - 我需要同步 Sockets 的 ArrayList 吗?

转载 作者:行者123 更新时间:2023-12-02 07:00:05 26 4
gpt4 key购买 nike

我有一个套接字数组列表,并且我正在使用多个线程。我是否需要将列表声明为 Collections.synchronizedList,然后每次我想要迭代列表时调用 synchronized(listName) ?使用 listName.add(socket) 将新套接字添加到列表中怎么样?我还需要同步该调用吗?

服务器类

import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class Server implements Runnable {

private int listenPort;
private int maxClients;
private int clientNumber;
private boolean isRunning;
private ServerSocket listener;

// Synchronize This?
private ArrayList<Client> clients;

public Server(int listenPort, int maxClients) throws IOException {
this.listenPort = listenPort;
this.maxClients = maxClients;
this.clientNumber = 0;
this.isRunning = true;

this.listener = new ServerSocket(
listenPort, maxClients,
InetAddress.getLocalHost()
);

this.clients = new ArrayList<Client>();
}

@Override
public void run() {
while (isRunning) {
try {
Socket socket = listener.accept();
Client client = new Client(socket, ++clientNumber);
clients.add(client);

new Thread(client).start();
} catch (IOException ex) {}
}
}
}

最佳答案

是的。

事实上,你有多个线程,这表明了这一点。

它包含Sockets这一事实与之无关。

关于java - 我需要同步 Sockets 的 ArrayList 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16766426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com