Скачать 0.78 Mb.
|
Создание нескольких потоков По той же схеме, что создание одного дочернего потока, реализуется создание нескольких потоков. В листинге 4 приведен пример программы, в которой создаются три дочерних потока. Листинг 4. Создание нескольких дочерних потоков // Импорт класса Date: import java.util.Date; // Класс NewThread наследует класс Thread: class NewThread extends Thread{ // Параметры потока (название, время задержки, количество итераций): private String nаmе; private int time; privаtе int соunt; // Конструктор: NewThread(String name, int time, int count){ super(name); this.name=name; Sуstеm.оut.рrint("Создан новый поток: "+nаmе+". "); // Отображение даты и времени: Sуstеm.оut.рrintln("Время: "+new Date()+"."); this.time=time; this.count=count; // Запуск потока: start(); } // Переопределение метода run(): public void run(){ try{ for (int i=1; i<=count; i++ ) { Sуstеm.оut.рrint("Поток: "+nаmе+". Сообщение "+i+" из "+count+". "); // Отображение даты и времени: Sуstеm.оut.рrintln("Время: "+new Date()+"."); // Приостановка потока: Thread.sleep(time);} }catch(InterruptedException е){ Sуstеm.оut.рrintln("Прерывание потока"+nаmе);} finally{ System.out.print("Поток \"" +nаmе+" \" работу завершил! "); // Отображение даты и времени: System.out.println("Время: "+new Date()+" . "); } }} class MultiThreadDemo{ // Исключение InterruptedException в методе main() не обрабатывается: public static void main(String args[]) throws InterruptedException{ Sуstеm.оut.рrint("Начало работы! "); // Отображение даты и времени: Sуstеm.оut.рrintln("Время: "+new Date()+"."); // Создание трех дочерних потоков: new NеwТhrеаd("Красный", 5000, 5); new NewThread("Желтый", 6000, 4); new NеwТhrеаd("Зеленый", 7000, 3); // Приостановка главного потока: Тhrеаd.slеер(30000); Sуstеm.оut.рrint("Работа программы завершена! "); // Отображение даты и времени: Sуstеm.оut.рrintln("Время: "+new Date()+"."); } } Несмотря на значительно больший объем программного кода по сравнению с предыдущим примером, в данной программе принципиальных изменений практически нет. В основном речь идет о «косметических» мерах. В первую очередь следует отметить, что конструктор класса NewThread, наследующего класс Thread, видоизменен так, что принимает три аргумента; имя создаваемого потока и два целочисленных параметра. Первый параметр определяет величину задержки при выводе потоком сообщений, второй - количество таких сообщений. Эти значения (аргументы конструктора) записываются в закрытые поля класса nаmе, timе и count соответственно. Основу метода run(), который переопределяется в классе NewThread и задает функциональность потока (то есть выполняемый в потоке код), составляет цикл. Количество итераций задается полем count (которое, в свою очередь, передается третьим аргументом конструктору). За каждую итерацию выводится сообщение с названием потока (параметр nаmе), номером сообщения, ожидаемым количеством сообщений этого потока, а также текущими датой и временем. Для получения даты и времени используется анонимный объект класса Date. Класс Date импортируется командой import java.util.Date в заголовке программы, а безымянный объект создается командой new Date(). При передаче этого объекта аргументом функции println() выводятся системные дата и время. После вывода сообщения на экран командой Thread.sleep(time) производится приостановка выполнения потока на время time (в миллисекундах) - параметр передается вторым аргументом конструктору класса NewThread. В конце выполнения потока выводится соответствующее сообщение с именем потока и временем завершения работы. Обращаем внимание, что в этом сообщении имя потока заключается в двойные кавычки, а сам символ двойных кавычек вводится в текст с помощью предваряющей косой черты. В главном методе программы в классе MultiТhreadDemo выводится сообщение о начале работы с указанием времени начала. Затем следующими командами создаются три анонимных объекта класса NewThread, каждый из которых запускает дочерний поток: new NewThread("Красный", 5000, 5); new NеwТhrеаd("Желтый", 6000, 4); new NewThread("Зеленый", 7000, 3); После этого командой Тhrеаd.slеер(30000) на 30 секунд приостанавливается выполнение главного потока, чтобы успели закончить работу дочерние потоки. Затем главным потоком выводится сообщение о завершении работы программы (с указанием времени завершения). Результат выполнения программы может иметь следующий вид: Начало работы! Время: Sat Sep 19 23:39:36 EEST 2014. Создан новый поток: Красный. Время: Sat Sep 19 23:39:36 EEST 2014. Создан новый поток: Желтый. Время: Sat Sep 19 23:39:36 EEST 2014. Создан новый поток: 3еленый. Время: Sat Sep 19 23:39:36 EEST 2014. Поток: Красный. Сообщение 1 из 5. Время:.Sаt Sep 19 23:39:36 EEST 2014. Поток: Желтый. Сообщение 1 из 4. Время: Sat Sep 19 23:39:36 EEST 2014. Поток: 3еленый. Сообщение 1 из 3. Время: Sat Sep 19 23:39:36 EEST 2014. Поток: Красный. Сообщение 2 из 5. Время: Sat Sep 19 23:39:41 EEST 2014. Поток: Желтый. Сообщение 2 из 4. Время: Sat Sep 19 23:39:42 EEST 2014. Поток: 3еленый. Сообщение 2 из 3. Время: Sat Sep 19·23:39:43 EEST 2014. Поток: Красный. Сообщение 3 из 5. Время: Sat Sep 19 23:39:46 EEST 2014. Поток: Желтый. Сообщение 3 из 4. Время: Sat Sep 19 23:39:48 EEST 2014. Поток: 3еленый. Сообщение 3 из 3. Время: Sat Sep 19 23:39:50 EEST 2014. Поток: Красный. Сообщение 4 из 5. Время: Sat Sep 19 23:39:51 EEST 2014. Поток: Желтый. Сообщение 4 из 4. Время: Sat Sep 19 23:39:54 EEST 2014. Поток: Красный. Сообщение 5 из 5. Время: Sat Sep 19 23:39:56 EEST 2014. Поток "Зеленый" работу завершил! Время: Sat Sep 19 23:39:57 EEST 2014. Поток "Желтый" работу завершил! Время: Sat Sep 19 23:40:00 EEST 2014. Поток "Красный" работу завершил! Время: Sat Sep 19 23:40:01 EEST 2014. Работа программы завершена! Время: Sat Sep 19 23:40:06 EEST 2014. Наличие момента времени, в который выводится сообщение, позволяет провести достаточно скрупулезный анализ особенностей «наложения» потоков друг на друга. Желающие могут заняться этим самостоятельно. Еще одна особенность представленного кода состоит в том, что в методе mаin() не производится обработка исключения InterruptedException. Поэтому в сигнатуру метода вынесено сообщение о том, что метод может выбросить такое исключение (throws InterruptedException). 4. Описание лабораторного оборудования (используемых программных комплексов). Для проведения лабораторного практикума дисциплины необходим компьютерный класс, оснащенный персональными компьютерами в количестве не менее 8 на подгруппу. На компьютерах должна быть загружена операционная система Windows, а также среда программирования Java. 5. Меры безопасности. Перед началом практикума по дисциплине преподаватель обязан провести инструктаж со студентами о правилах техники безопасности. Инструктаж включает в себя следующий перечень: правила техники безопасности при работе с электроустановками: правила техники безопасности при работе за компьютером; правила пожарной безопасности: правила поведения при возникновении чрезвычайных ситуаций. Все лаборатории кафедры должны быть оборудованы средствами пожарной сигнализации, сигнализации при опасности, средствами аварийного пожаротушения. В лабораториях должны находиться: план эвакуации: правила техники безопасности. Перед каждой лабораторной работой группа студентов (подгруппа) должна расписаться об ознакомлении с правилами безопасности в журнале по технике безопасности, находящемся в лаборатории. 6. Задание. Написать программы для параллельной работы на языке Java. 1. Создать главный поток. Создать 2 потока расширением класса Thread. Приостановка главного потока на 2 сек. Дочерних на 5 сек. Сообщения о времени. 2. Создать главный поток. Создать 3 потока на основе реализации интерфейса Runnablе. Приостановка главного потока на 1 сек. Дочерних на 5 сек. Сообщения о событыях. 3. Создать главный поток. Создать 4 потока расширением класса Thread. Приостановка главного потока на 2 сек. Дочерних на 3 сек. Сообщения об используемом оборудовании. 4. Создать главный поток. Создать 1 поток на основе реализации интерфейса Runnablе. Приостановка главного потока на 1 сек. Дочернего на 5 сек. Сообщения о дате. 5. Создать главный поток. Создать 5 потоков расширением класса Thread. Приостановка главного потока на 1 сек. Дочерних на 0,5 сек. Сообщения о цвете. 6. Создать главный поток. Создать 3 потока на основе реализации интерфейса Runnablе. Приостановка главного потока на 1 сек. Дочерних на 3 сек. Сообщения о номерах. 7. Создать главный поток. Создать 4 потока расширением класса Thread. Приостановка главного потока на 1 сек. Дочерних на 7 сек. Сообщения о дисциплинах. 8. Создать главный поток. Создать 2 потока на основе реализации интерфейса Runnablе. Приостановка главного потока на 2 сек. Дочерних на 3 сек. Сообщения о животных. 9. Создать главный поток. Создать 3 потока расширением класса Thread. Приостановка главного потока на 2 сек. Дочерних на 6 сек. Сообщения о цветах. 10. Создать главный поток. Создать 6 потоков на основе реализации интерфейса Runnablе. Приостановка главного потока на 1 сек. Дочерних на 2 сек. Сообщения о событиях. 7. Методика выполнения задания. Для выполнения работы необходимо: Повторить правила техники безопасности при работе с вычислительной техникой. Изучить раздел "Организация параллельной работы потоков" лекционного курса, а также теоретическую часть настоящих методических указаний. Получить у преподавателя вариант задания. Выбрать требование к операционной системе реального времени для изучения на компьютере. Оформить отчет по лабораторной работе. Защитить лабораторную работу, продемонстрировав преподавателю: отчет по лабораторной работе; умение решать аналогичные задачи; теоретические знания. 8. Требования к содержанию и оформлению отчета. Отчет по выполненной лабораторной работе должен содержать: титульный лист; условие задания; текст программы; руководство пользователя; отлаженную программу на компьютере. ЛАБОРАТОРНЫЕ РАБОТЫ 5-8 Разработка диаграмм метода COMET UML–проектирования систем реального времени. Работа с пакетом Rational Rose. 1. Цель работы. Целью лабораторной работы является закрепление теоретических знаний в области UML проектирования систем реального времени. 2. Задачи. К задачам лабораторной работы относятся: Приобретение навыков применения возможностей UML проектирования систем реального времени; Изучение возможностей пакета RATIONAL ROSE для проектирования систем реального времени. 3. Теоретическая часть. Объектно-ориентированные методы основаны на концепциях сокрытия информации, классов и наследования. Сокрытие информации позволяет получить замкнутые, а оттого в большей степени поддающиеся модификации и сопровождению системы. Наследование – это систематический способ адаптации классов. Язык UML, пришедший на смену многочисленным системам нотации и методикам проектирования, предложил нотацию для описания объектно-ориентированных моделей, которая стала промышленным стандартом. Однако для эффективного применения нотации UML необходимо сочетать ее с каким-либо методом объектно-ориентированного анализа и проектирования. В методе COMET сочетаются прецеденты использования, статическое моделирование, диаграммы состояний и диаграммы последовательности событий, которые встречаются в нескольких методах. Применяемая нотация основана на UML. В ходе моделирования прецедентов использования определяются функциональные требования к системе в терминах актеров и прецедентов. Статическая модель предлагает статический взгляд на информационные аспекты системы. Класс определяется в терминах своих атрибутов и взаимоотношений с другими классами. Результатом динамического моделирования является динамический взгляд на систему. Уточняются сформулированные ранее прецеденты с целью показать взаимодействие объектов, участвующих в каждом из них. Разрабатываются диаграммы кооперации и последовательности, отражающие кооперацию объектов в каждом прецеденте. Зависящие от состояния аспекты системы описываются с помощью диаграмм состояний, причем для каждого объекта составляется своя диаграмма. В аналитической модели основное внимание уделяется пониманию проблемы: выявлению объектов предметной области и передаваемой между ними информации. Объекты и классы предметной области группируются на основе критериев выделения объектов. Рассмотрение вопросов, активен объект или пассивен, синхронно или асинхронно посылаемое сообщение и какая вызывается операция у объекта-получателя, откладывается до стадии проектирования. На этапе проектирования среди объектов выявляются активные (их называют задачами) и пассивные (их называют объектами). Для определения задач применяются критерии разбиения на задачи. Разрабатываются также интерфейсы задач и описываются операции каждого пассивного класса. |
Лабораторная работа №9 59 Лабораторная работа №10 72 Лабораторная... Рабочая тетрадь для выполнения лабораторных работ по мдк. 03. 01. «Техническое обслуживание и ремонт компьютерных систем и комплексов»... |
Лабораторная работа 1 4 лабораторная работа 2 13 лабораторная работа... Интернете разнообразную информацию – описательную, графическую, картографическую и пр. При разработке сайтов необходимо уметь работать... |
||
Методические указания для студентов по выполнению лабораторных работ... Лабораторная работа 4, 5 Исследование регистров, счетчиков и дешифраторов Лабораторная работа 6, 7 Исследование генератора псевдослучайной... |
Лабораторная работа №10. Изучение принципа действия и функциональной... Лабораторная работа № Изучение принципов построения системы автоматической подстройки частоты (апч) радиолокационной станции |
||
Лабораторная работа №27 Лабораторная работа №28 Контрольные работы... Пм «Сборка монтаж (демонтаж) элементов судовых конструкций, корпусов, устройств и систем металлических судов» |
Лабораторная работа №1 «Применение средств операционных систем и... |
||
Лабораторная работа №1 «Применение средств операционных систем и... |
Лабораторная работа № Лабораторная работа №1. Изучение основных возможностей программного продукта Яндекс. Сервер. Установка окружения, установка и настройка... |
||
Практическая работа Содержание Лабораторная работа: Оценка программно-аппаратных средств при переходе на Windows Vista 3 |
Лабораторная работа 1 Тема работы: Установка операционной системы.... Оответствии с инструкциями преподавателя, последовательность действий, описанных в частях 1 и 2, может быть скорректирована с учетом... |
||
Лабораторная работа №2. Расчет матрицы a инерционных коэффициентов... Лабораторная работа №3. Расчет матриц Якоби (С7, D7j) исполнительного механизма космического манипуляционного робота 9 |
Контрольная работа №1 по теме «Организм. Молекулярный уровень» Лабораторная работа №2 «Изучение клеток и тканей растений и животных на готовых микропрепаратах» |
||
Лабораторная работа Изучение принципов функционирования простейшей микроэвм и процессора Лабораторная работа Изучение принципов функционирования простейшей микроэвм и процессора I8085A при реализации программы |
Лабораторная работа №5 Тема: Использование элементов управления, cookie, сессии. Работа с почтой Запустите файл из папки лабораторной работы №7 для установки Denver. Внимательной следуйте инструкциям программы – установки. Установку... |
||
Лабораторная работа №4a ... |
Лабораторная работа №1 Целью работы является изучение технологии построения модели процесса в нотации bpmn 0 с использованием |
Поиск |