Доброго времени суток.
Вчера проходил тестирование и в конечном итоге прошёл его. Но остались кое-какие вопросы на счёт this.
Вот текст задания:
В системе мониторинга слежение за каждым устройством реализовано в отдельном потоке.
Каждый поток должен постоянно посылать сообщения на сервер при помощи вызова sender.send(message) (sender - общий объект, доступный из каждого экземпляра TestThread)
class TestThread extends Thread {
/*.....*/
String message;
public void run() {
while (true){
/*YOUR CODE will be placed HERE*/
}
}
}
Передача сообщения длительный процесс.
Важно чтобы устройства посылали сообщения по очереди, то есть в один момент отсылал сообщение только один поток.
Добавьте в код необходимые строки так, чтобы все устройства передавали сообщение требуемым образом.
Задержки выполнения потоков делать не надо.
Естественно, я догадался, что тут нужна синхронизация потоков. Причём по единому монитору, в качестве которого тут выступает
sender.
Т.е мой ответ был таким:
synchronized (sender) {
sender.send(message);
}
Но система упорно отказывалась принимать такого рода ответ.
В конце оказалось, что ответом тут является:
synchronized (sender) {
sender.send(this.message);
}
Если я правильно понимаю, то тут разницы между
this.message
и
message
быть не должно.
Ведь когда мы вызываем метод
run()
, то мы неявно передаем туда ссылку на вызывающий экземпляр. И Java автоматически подменяет подобные вызовы переменных на this.
Это у меня неправильная логика рассуждения, или разработчики теста что-то сделали не так?