Задать вопрос

Почему без вызова this система не принимает ответ?

Доброго времени суток.

Вчера проходил тестирование и в конечном итоге прошёл его. Но остались кое-какие вопросы на счёт 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.

Это у меня неправильная логика рассуждения, или разработчики теста что-то сделали не так?
  • Вопрос задан
  • 728 просмотров
Подписаться 5 Оценить 3 комментария
Пригласить эксперта
Ответы на вопрос 1
jamakasi666
@jamakasi666 Куратор тега Java
Просто IT'шник.
Могу предположить что в случае потоков переменная this.message означает что поток отработает с данными которые были на момент его запуска\создания а не те которые реально лежат в памяти на данный момент. Если без this то данные будут браться именно те которые в данный момент реально находятся в переменной но поток мог спать и данные отправить должен был другие.
Это лишь предположение, и вероятнее всего неверное.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы