У меня есть ArrayList сокетов, и я использую несколько потоков. Нужно ли объявлять список как Collections.synchronizedList, а затем вызывать синхронизацию (listName) каждый раз, когда я хочу перебирать список? Как добавить новые сокеты в список с listName.add (сокет)? Нужно ли мне синхронизировать этот вызов?Нужно ли мне синхронизировать ArrayList сокетов?
Class Server
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) {}
}
}
}