- •Особенности языка 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
Механизм блокировки объекта
Эффект синхронизации достигается за счёт применения механизма блокировки (lock). Каждому объекту в Java ставится в соответствие свойство блокировки lock. Lock — специальная переменная в области памяти, выделяемой Java-машиной при создании объекта. Потоки взаимодействуют в соответствии с протоколом, согласно которому любому действию над объектом должен предшествовать захват права на блокировку объекта. Если поток захватил такое право (установил блокировку объекта), то другие потоки не могут использовать объект, пока право не будет возвращено потоком-владельцем, то есть пока блокировка не будет освобождена. Право доступа к блокировке объекта обеспечивается в Java с помощью ключевого слова synchronized.
Использование ключевого слова synchronized гарантирует, что разделяемый ресурс потоков будет одновременно использоваться только одним потоком.
Способы использования ключевого слова synchronized
1.Синхронизированные методы
synchronized тип_возвр_знач имя метода (...)
{
// тело метода
}
При вызове потоком синхронизированного метода соответствующий ему объект (в котором метод определён) блокируется. Никакой другой поток не может вызвать данный метод или какой-либо другой синхронизированный метод, определённый в данном объекте. Несинхронизированные методы могут вызыватся.
2.Оператор synchronized
Можно выполнять синхронизацию только критического участка программы (какого-либо
фрагмента тела метода) с помощью оператора: synchronized (object)
{
// операторы.... (синхронизированный участок кода)
}
где object — ссылка на объект, который необходимо синхронизировать, т.е. с которым одновременно должен работать только один поток.
Один из потоков, войдя в данный критический участок программы, блокирует object. Другой поток не сможет войти в этот участок программы, пока первый поток не завершит работу и не снимет блокировку.
Обратите внимание: объявление synchronized-метода — это просто сокращённая синтаксическая конструкция для описания метода, тело которого заключено внутри synchronized-оператора, использующего для указания на блокируемый объект ссылку this.
Преимущества оператора synchronized:
1. Оператор даёт возможность определения синхронизированного участка кода, охватывающего только некоторый фрагмент тела метода.
Общее правило многопоточного программирования: блокировка должна охватывать как можно более короткий участок кода, так как синхронизация влияет на производительность кода (время вызова синхронизированного метода, например, значительно больше, чем несинхронизированного).
2. Synchronized-оператор позволяет синхронизировать объекты, отличные от this (т.е. от объектов, в которых определены синхронизированные методы), и создавать самые разнообразные схемы синхронизации.
30