Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Топ:
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Устройство и оснащение процедурного кабинета: Решающая роль в обеспечении правильного лечения пациентов отводится процедурной медсестре...
Интересное:
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
| Задание: |
| Упражнение 2 (Последовательная работа потоков). - Откройте проект TicTakв каталоге Лабы Java2/Threads /TicTak. - Запустите его и обратите внимание,что первым всегда начинает работать первый поток. Затем порядок срабатывания потоков произвольный. Необходимо добавить код, который заставит потоки работать последовательно: · откройте метод «main»и первым оператором добавьте создание объекта класса «Object»и с именем «monitor»; · ссылку на этот объект передайте и в первый и во второй потоки; · откройте класс «ThreadOne»; · добавьте приватную переменную «monitor»с типом «Object»; · измените конструктор, добавив ему входной параметр с типом «Object» и инициализируйте переменную «monitor» входным параметром; · в цикле метода «run», поле печати добавьте следующий код synchronized (monitor) { monitor.notify(); if (i < TicTak.num-1) monitor.wait(); } · снимите комментарий с блока try-catch; · откройте класс «ThreadTwo»и сделайте в нём аналогичные изменения; - Запустите программу. Зачем понадобилось создавать объект «monitor»? |
У нас уже есть сделанная заготовка, где мы видим некорректно работающую программу, как и должно быть в лабораторной работе на начальной стадии.
Задача: сделать, чтобы порядок был.Давайте разберемся с тем, что есть.
Итак. Начнем с первого потока:
.
Ничего нового в этом коде мы здесь не увидим. Поток ничего не делает, он просто обозначает, что он работает.

Открываем второй поток: 

Второй поток получился чуть побольше. Обратите внимание, что здесь специально в методе runу этого класса стоит sleep. И вот этот sleepгарантирует, что система всегда начнет работать с того потока. Даже если ThreadTwoпервый рванул, он все-равно пропустит тот поток. Поэтому мы можем повлиять все-таки на то, кто первый начнет работу. Нуивсе. Адальшетолькочерезnotifyиwait.
Теперь открываем main:

В main у нас создается два потока, естественно в правильном порядке мы их стартуем. Они там пишут-пишут-пишут что-то на экране, а потом наш главный поток (который main) он ждет завершения обоих. Мы не знаем, какой из них раньше завершится. Поэтому мы ждем один, мы ждем второй и когда все эти join’ы позволят mainзавершиться программа закончит свою работу. А выглядит это вот так. Выглядит отвратительно.
| run: 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд) |
Видите? Ничегонеполучается. Потому что сама система недетерминированная. И даже наша помощь, что всегда стартует первый поток не помогает. Поэтому вашей задачей сейчас здесь используя волшебные слова: wait, notify, synchronized. Здесь нужно добиться того, чтобы они работали следующим образом:
| 1 2 1 2 1 2 1 2 1 2 |
Мое решение:
| ThreadOne.java |
|
| ThreadTwo.java |
|
| Main.java |
|
Ответ:
| run: 1 - 2 1 - 2 1 - 2 1 - 2 1 - 2 1 - 2 1 - 2 1 - 2 1 - 2 1 - 2 1 - 2 1 - 2 1 - 2 1 - 2 1 - 2 1 - 2 1 - 2 1 - 2 1 - 2 1 - 2 СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд) |
|
|
|
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
© cyberpedia.su 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!