0 / 0 / 0
Регистрация: 17.01.2015
Сообщений: 20
|
||||||
1 | ||||||
Межпотоковые коммуникации04.02.2015, 14:56. Показов 1060. Ответов 7
Метки нет (Все метки)
В учебнике Шилдта встретил программу по теме Межпотоковые коммуникации, не могу понять как здесь работает boolean valueSet? Что за чем выполняется, кто может объясните пожалуйста.
Программа выводит: Отправлено: 1 Получено: 1 Отправлено: 2 Получено: 2 Отправлено: 3 Получено: 3 Отправлено: 4 Получено: 4 Отправлено: 5 Получено: 5
0
|
04.02.2015, 14:56 | |
Ответы с готовыми решениями:
7
Сети и коммуникации Интерфейс и лаги в коммуникации Механизм коммуникации: Call Center 3 пути коммуникации в модели TCP/IP |
17 / 17 / 7
Регистрация: 05.09.2012
Сообщений: 246
|
|
04.02.2015, 20:34 | 2 |
Сообщение было отмечено sfisher как решение
Решение
valueSet это флажок, который запускает методы put() и get(). Классы Consumer и Producer пробуют выполнить их постоянно, но сами методы исполняют действие только когда valueSet пребывает в определенном состоянии (в случае с put() метод исполняет полезную работу по изменению n только когда valueSet false.). Выполнив работу метод изменяет состояние флажка valueSet и оповещает другие методы.
1
|
0 / 0 / 0
Регистрация: 17.01.2015
Сообщений: 20
|
|
04.02.2015, 22:51 [ТС] | 3 |
AMufu не могли бы вы подробнее описать какой valueSet здесь за что отвечает в методах get и put, почему в get стоит везде false а в put стоит true? Буду очень благодарен. Спасибо.
0
|
17 / 17 / 7
Регистрация: 05.09.2012
Сообщений: 246
|
|
05.02.2015, 03:29 | 4 |
Сообщение было отмечено sfisher как решение
Решение
Что имеется ввиду под "какой valueSet здесь за что отвечает ". valueSet только один и каждый метод ему присваивает значения поочередно - put изменяет n только тогда, когда valueSet false, а изменив n устанавливает valueSet true. Метод set считывает n только тогда, когда valueSet true , а изменив n устанавливает valueSet false. Так они поочередно делают работу, изменяют valueSet и оповещают друг друга через notify.
1
|
0 / 0 / 0
Регистрация: 25.08.2015
Сообщений: 1
|
|
25.08.2015, 20:37 | 5 |
Хочу присоединиться к интересу sfisher разобраться в данном примере. Сам дошел в Шилдте до этого примера и подвис немного. Я понял, что valueSet здесь отвечает за переключение между методами "Set" и "Put", но вывод этой программы не совпадает с тем алгоритмом выполнения программы, который вижу я.
Я опишу порядок выполнения в том виде в котором я его вижу. Ткните пожалуйста носом где я не прав. начну с строчки 59: new Producer (q) ; После компиляции этой строки мы попадаем в конструктор "Producer (Q q)" класса "Producer"; В нем запускаем первый поток, после чего выполнение переходит в метод "put()". В данный момент времени как я понимаю значение valueSet установленное по умолчанию равно false. ТОЕСТЬ условие "while(valueSet) " ВЫПОЛНЯЕТСЯ и работа нашего потока приостанавливается до момента, пока в методе "get()" не будет вызван метод "notify()". После того как был запущен первый поток со строки "33: new Thread(this,"Поставщик").start ();" - управление передается методу "main" в строку "60: new Consumer (q) ;" . Пройдя череду аналогичных событий запускается второй поток и мы оказываемся в методе "get()". Здесь условие "while(!valueSet)" НЕ ВЫПОЛНЯЕТСЯ (значение valueSet все еще равно false), и условие тела этого цикла("wait()") также не выполниться. ТОЕСТЬ продолжается выполнение метода "get()" со строки 12: System.out.println("Получено: " + n) ;. Здесь у меня начинается коллапс))) Раз метод "put()" еще спит и поле "int n;" в классе Q еще неинициализировано значит в консоль должно вывести вначале "Получено: null". затем стока "14: notify();" - пробудит первый поток, в котором переменная "int n" проинициализируется значением "0", после чего логика выполнения мне ясна. Тоесть вывод этой программы я выжу как: Получено: null Отправлено: 0 Получено: 0 Отправлено: 1 Получено: 1 ...... ...... очень нуждаюсь хоть в каком-то совете)) Спасибо
0
|
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
|
|
26.08.2015, 01:32 | 6 |
Поля классов всегда инициализируются значениями по умолчанию, если не указано иное. Для примитивных типов, это 0 для чисел и false для boolean. Все ссылки инициализируются null-ом.
0
|
3 / 3 / 0
Регистрация: 01.05.2012
Сообщений: 18
|
|
26.01.2017, 18:30 | 7 |
Условие наоборот не выполняется и в таком случае оператор try опускается, счётчик увеличивается, а вот valueSet становится true, при этом потоку запущенному параллельно разрешается исполнение notify(), так как возможно он уже перешёл в режим wait()
Сам дочитал только до этого момента, но сразу не понял как именно происходит приостановка и возобновление потока. Получается это только для экономии процессорного времени? Иначе тоже самое можно было выставить в условии цикла. Вот сейчас пролистал пару страниц назад и ещё раз прочёл, автор так и указал, что это всё можно реализовать на циклах, но для экономии ЦП существуют методы )))))
0
|
3 / 3 / 0
Регистрация: 01.05.2012
Сообщений: 18
|
|
28.01.2017, 12:18 | 8 |
да уж снова мимо
0
|
28.01.2017, 12:18 | |
28.01.2017, 12:18 | |
Помогаю со студенческими работами здесь
8
Архитектура для коммуникации объектов Протокол для надёжной коммуникации по RS485. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции.
/ / . . .
|
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование
Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
|
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы
В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
|
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире
В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
|
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации
В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
|
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии
В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
|
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации
В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
|
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику
Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
|
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику
В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
|
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера
Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
|
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды
В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
|
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике
В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
|