Предположим, у меня есть класс, как это:Как работает синхронизированный оператор в этом случае?
public class Server {
public static void main(String[] args) {
Map<Integer, ServerThread> registry = Collections.synchronizedMap(new LinkedHashMap<Integer, ServerThread>());
...
while(true) {
Socket socket = serverSocket.accept();
ServerThread serverThread = new ServerThread(id, registry);
registry.put(id, serverThread);
}
}
}
Тогда:
public class ServerThread extends Thread {
private Map<Integer, ServerThread> registry;
private int id;
public ServerThread(int id, Map<Integer, ServerThread> registry) {
this.id = id;
this.registry = registry;
}
...
private void notify() {
synchronized(registry) {
for(ServerThread serverThread : registry.values()) {
serverThread.callSomePublicMethodOnThread();
}
}
}
}
Я просто хочу, чтобы убедиться, что registry
не модифицируются, пока я итерация над ним. Обеспечивает ли это синхронизированное отображение этого поведения? Или мне нужен оператор synchronized
. Будет ли синхронизированный оператор вести себя так, как я ожидаю?
Благодаря
Спасибо! (требуемые символы) –