
- •1. Java. Основные синтаксические структуры языка Java. Типы данных Java. Массивы.
- •2. Концепции ооп. Классы и объекты. Ключевые свойства объектов. Инкапсуляция. Время жизни объектов. Конструкторы.
- •3. Наследование и полиморфизм. Спецификаторы доступа (private, protected, public). Иерархия классов. Перечисления. Интерфейсы и абстрактные классы.
- •4. Статические поля и методы. Порождающие методы. Блоки инициализации. Статические внутренние классы.
- •5. Внутренние, локальные и анонимные классы. Пакеты. Компиляция классов. Jar-файлы.
- •События. Виды событий. Иерархия классов событий. Команда и источник. Адаптеры. (читаем картинки слева направо, потом на новую строку)
- •Принципы создания пользовательского интерфейса. Контейнеры, панели. Основные компоненты библиотеки Swing.
- •26. Потоки выполнения. Синхронизация и сигнализирование с помощью Lock.
- •27. Дополнительные возможности синхронизации. Справедливая блокировка. Барьер, затвор, семафор.
- •Барьеры
- •28. Расширенные методы синхронизации. Блокировка чтения и записи, Exchanger. Многопоточные приложения и Swing.
- •29. Настраиваемые типы данных. Универсальные классы. Ограничения на тип.
- •30. Настраиваемые типы данных. Универсальные методы. Ограничения в использовании настраиваемых типов.
27. Дополнительные возможности синхронизации. Справедливая блокировка. Барьер, затвор, семафор.
Если вы внимательно рассмотрите Javadoc, вы увидите, что одним из аргументов конструктора reentrantLock является булево значение, которое позволяет решить, хотите ли вы справедливой (равнодоступной) или несправедливой (неравнодоступной)) блокировки. Справедливая блокировка - это когда потоки получают блокировку в том порядке, в каком они ее запрашивали; несправедливая блокировка может допускать barging, когда поток может получить блокировку раньше другого, который запрашивал ее первым.
В действительности гарантия равнодоступности для блокировок очень сильна и достигается за счет значительных потерь в производительности. Учет использования системных ресурсов и синхронизация, необходимые для обеспечения равнодоступности означают, что соперничающие равнодоступные блокировки будут иметь гораздо более низкую пропускную способность, чем неравнодоступные блокировки. По умолчанию следует установить для равнодоступности значение false, если для правильности вашего алгоритма не критично, чтобы потоки обслуживались точно в порядке очереди.
Как насчет синхронизации? Равнодоступны ли блокировки встроенного монитора? Ответ, к удивлению многих, - нет, и никогда не были. И никто не жаловался по поводу зависания потоков, поскольку JVM гарантирует, что всем потокам будет в конечном счете дана блокировка, которую они ждут. Статистическая гарантия равнодоступности обычно достаточна для большинства случаев и требует гораздо меньших затрат, чем детерминированная гарантия равнодоступности. Тот факт, что reentrantLock "неравнодоступны" по умолчанию просто показывает то, что было верно для синхронизации. Если вы не волновались об этом в случае синхронизации, не беспокойтесь и по поводу reentrantLock.
Синхронизаторы
К синхронизаторам можно отнести различного рода структуры, которые отвечают за координацию поток. Рассмотрим некоторые такие структуры, которые были добавлены в пакете java.util.concurrency:
Семафоры
Барьеры
Обменники
Щеколда
Семафоры
В 1968 г. Э. Дейкстра предложил удобную форму механизма захвата/освобождения ресурсов, которую он назвал операциями P и V над считающими семафорами. Считающим семафором называют целочисленную переменную, выполняющую те же функции, что и байт блокировки. Однако в отличие от последнего она может принимать кроме “0″ и “1″ и другие целые положительные значения. Как можно понять из написанного выше, семафоры используются для ограничения числа потоков, которые используют некий ресурс. Для выполнения операций P и V в Java классе java.util.concurrent.Semaphore существуют специальные методы. acquire – пытается получить доступ к ресурсу и блокирует текущий поток до тех пор, пока ресурс не будет доступен. tryAcquire – пытается получить доступ к ресурсу в момент вызова без блокировки текущего потока. release – освобождение ресурса. Следует отметить, что у Семафора может быть различной сама стратегия получения освободившегося ресурса.