Классический пример простого сервера:Каков эффект объявления окончательной переменной в методах?
class ThreadPerTaskSocketServer {
public static void main(String[] args) throws IOException {
ServerSocket socket = new ServerSocket(80);
while (true) {
final Socket connection = socket.accept();
Runnable task = new Runnable() {
public void run() {
handleRequest(connection);
}
};
new Thread(task).start();
}
}
}
Почему должен Socket
быть объявлен как final
? Это потому, что новый Thread
, который обрабатывает запрос, может ссылаться на переменную socket
в методе и вызывать какой-то ConcurrentModificationException
?
Большое спасибо. – Finbarr