- •Особенности языка Java
- •История Java
- •Характерные особенности Java
- •Разработка и выполнение Java приложения:
- •Понятие среды выполнения Java
- •Переносимость языка Java
- •Высокая производительность языка Java
- •Типы Java-приложений
- •Автономное (самостоятельное) приложение – application
- •Апплет – applet
- •Комбинированное приложение
- •Сервлет – servlet
- •Мидлет – midlet
- •Различия между автономными приложениями и апплетами
- •Автономное приложение
- •Апплет
- •Этапы жизненного цикла апплета
- •Этапы жизненного цикла в соответствии со стандартом Sun:
- •Этап инициализации
- •Этап запуска
- •Этап останова
- •Этап уничтожения
- •Этап рисования (перерисовки) окна апплета
- •Отличия Java от C++
- •Конструкторы классов
- •«Сборщик мусора»
- •Типы данных в Java
- •Простые типы
- •Ссылочные (объектные) типы
- •Строки в Java
- •Массивы в Java
- •Классы в Java
- •Особенности реализации
- •Пакеты
- •Управление доступом к элементам класса
- •Поля класса
- •Методы
- •Перегрузка и переопределение методов
- •Ключевые слова THIS и SUPER
- •Интерфейсы в Java
- •Понятие Java API
- •Пакеты ядра Java API (в JDK 1.0):
- •Развитие ядра Java API (в новой версии JDK и в Java 2)
- •Основные понятия AWT
- •Компоненты
- •Контейнеры
- •Компоновки. Менеджеры компоновки
- •События
- •События. Обработка событий
- •Иерархия классов-событий
- •Семантические события и их источники-компоненты AWT
- •Модель делегирования событий
- •Методы, объявленные в интерфейсах для семантических событий
- •Способы реализации блока прослушивания событий от AWT-компонента
- •Понятие класса-адаптера
- •Комбинированное приложение Java. Обработка события WindowEvent
- •Исключения в Java и их обработка
- •Иерархия классов исключений
- •Различия между исключениями Exception и ошибками Error
- •Организация обработки исключений в программе
- •Используемые операторы:
- •Как правильно организовывать обработку исключений
- •Понятия процесса и потока
- •Конструкторы класса Thread
- •Наиболее важные методы класса Thread
- •Способы создания потоков
- •Синхронизация потоков
- •Когда следует использовать синхронизацию потоков?
- •Механизм блокировки объекта
- •Способы использования ключевого слова synchronized
- •Синхронизированные методы
- •Оператор synchronized
- •Преимущества оператора synchronized:
- •Взаимодействие потоков: использование методов wait(), notify(), notifyAll()
- •Стандартные образцы кода использования методов
- •Поток-диспетчер событий AWT
- •Потоки и исключения
- •О группах потоков
- •Технология компонентного программирования JavaBeans
- •Понятие технологии компонентного программирования
- •Этап компиляции
- •Этап разработки
- •Этап создания приложения
- •Этап выполнения
- •Понятие компонентной модели
- •Основные требования к классам Bean-компонентов
- •Соглашения об именах
- •Соглашения об именах для свойств
- •Соглашения об именах для событий
- •Соглашения об именах для методов
- •Использование событий для управления свойствами
- •Связанные свойства
- •Преобразование обычного свойства в связанное
- •Ограниченные свойства
- •Преобразование обычного свойства в ограниченное
- •Ввод-вывод в Java: основные понятия
- •Основные группы классов и интерфейсов пакета java.io
- •Фильтрованные потоки
- •Буферизированные потоки
- •Принципы работы Buffered-потоков
- •Входные потоки
- •Выходные потоки
- •Канальные потоки
- •Синхронизация потоков данных
- •Понятие отражения (рефлексии)
- •Класс java.lang.Class
- •Классы пакета java.lang.reflect
- •Понятие интроспекции
- •Понятие сериализации
- •Обеспечение сериализуемости Bean
- •Выполнение базовой сериализации
- •Пример с сериализацией (см. SerializationDemo.java)
- •Настройка сериализации
- •Методы readObject и writeObject
- •Интерфейс Externalizable
- •Создание экземпляров сериализованных Bean
- •Приложение
- •// Файл HelloApplet.java
- •// Файл MyApplet.java
- •// Файл StringDemo.java
- •// Файл ConstrDemo.java
- •// Фрагменты файла AnimBallsPlus.java
Скачано с сайта http://ivc.clan.su
объект, вызывается метод run() целевого объекта и начинается выполнение потока из целевого объекта.
Если поток используется для выполнения какой-либо периодической работы, метод run()
содержит внутри себя бесконечный цикл либо цикл со счетчиком и проверкой условия. Когда
осуществляется выход из цикла и метод run() возвращает управление, поток нормально завершает работу.
В большинстве потоков при очередном проходе цикла необходимо осуществлять приостановку работы на некоторое (пусть небольшое) время. Если не приостановить работу текущего потока, JVM может быть перегружена его командами и управление не будет передаваться другим претендующим на время процессора потокам.
static void sleep(long milliseconds) throws InterruptedException — метод вынуждает текущий поток освободить ЦП и временно приостановить свое выполнение на указанный интервал.
При выполнении потоком метода sleep() проверяется, не вызвал ли другой поток для объекта данного потока метод interrupt(), и генерируется исключение InterruptedException, если поток находится в состоянии прерывания.
Необходимо обрабатывать исключение типа InterruptedException, которое может быть выброшено методом.
!!! void stop() — устаревший метод. В ранних версиях Java метод использовался для завершения работы соответствующего потока. В новой версии Java 2 корпорация Sun Microsystems не рекомендует использовать этот метод (из-за нежелательных побочных явлений). Для остановки работы потока данного объекта Thread рекомендуется присваивать ссылке на объект потока
значение null. Эту ссылку целесообразно использовать в выражении для проверки условия выхода из цикла в методе run(). После выполнения метода run() поток завершает работу, и объект потока подлежит удалению сборщиком мусора.
Способы создания потоков
•Расширение класса Thread
•Реализация интерфейса Runnable
(см. примеры ParamBanner.java (1,2,3))
Синхронизация потоков
Процессы выполняются в собственном адресном пространстве и защищены от воздействия друг на друга средствами операционной системы. Потоки лишены подобной защиты. Любой поток в рамках одного процесса может получить доступ и внести изменения в данные, которые являются разделяемыми ресурсами, т.е. которые каждый поток считает принадлежащими только ему.
Основной механизм, применяемый в многопоточном программировании для обеспечения корректной работы потоков с разделяемыми ресурсами — синхронизация потоков. Java на уровне языка обеспечивает поддержку синхронизации потоков.
Когда следует использовать синхронизацию потоков?
Центральный процессор циклически обрабатывает все одновременно выполняемые потоки команд. Распределением времени центрального процессора между потоками занимается специальный модуль операционной системы — планировщик. Планировщик по очереди передаёт управление отдельным потокам команд.
При многопоточном программировании необходимо выявлять методы и данные, выполнение которых и обработка которых не должны прерываться переходом процессора от исполнения одного к исполнению следующего потока. Если такие методы и данные имеются, следует применять синхронизацию потоков.
29