Лекции по Java SE Александр Харичкин, Performance Support Manager, NetCracker презентация

Содержание


Презентации» Образование» Лекции по Java SE Александр Харичкин, Performance Support Manager, NetCracker
Лекции по Java SE Александр Харичкин, Performance Support Manager, NetCrackerПлан лекции
 Многозадачность (multithreading) и Java API
 Поддержка многозадачности в Java
Многозадачность (многопоточность)
 Поток – часть приложения, исполняющая определенную задачу
 Многозадачность –Многозадачность в Java
 Java поддерживает многозадачность и предоставляет интерфейс управления потокамиСоздание потока исполнения – способ №1
 Способ №1: наследование от классаСоздание потока исполнения – способ №2
 Способ №2: реализация интерфейса java.lang.RunnableУправление исполнением потока
 public static void sleep(long millis) throws InterruptedException приостанавливаетУправление исполнением потока: прерывание
 Правильное прерывание потоков:
 public void interrupt()
 пытаетсяПотоки-демоны
 Демон – это поток, который может существовать неограниченное время.
 ЕслиПриоритеты потоков
  Задание приоритета потока
 	public final void setPriority(int newPriority);
План лекции
 Многозадачность (multithreading) и Java API
 Одновременный доступ (concurrency) иПроблемы одновременного доступа
 При неконтролируемом доступе разными потоками данные могут бытьСинхронизация
 Синхронизированный блокНедостатки синхронизации
 Невозможно прервать поток, пытающийся получить блокировку.
 Невозможно задать тайм-аутОперации, не требующие синхронизации
 Атомарные операции. Все операции над числами примитивногоБлокирующие операции
 Блокирующие вызовы (IO, network, …) внутри synchronized методов.
 ПриМонитор
 Монитор (по определению) – объект класса, содержащего только закрытые поля.План лекции
 Многозадачность (multithreading) и Java API
 Одновременный доступ (concurrency) иJava Concurrency API
 В Java 5 добавлены новые инструменты синхронизации java.util.concurrent.atomic
 Набор классов с атомарными методами
 AtomicReference
 AtomicInteger
 …
 Основной методjava.util.concurrent.atomic – пример
 На основе классов пакета можно разрабатывать неблокирующие алгоритмы.
java.util.concurrent.locks.Lock
 Расширенный функционал по сравнению с использованием synchronized. Простейший пример использования:java.util.concurrent.locks.Condition
 Аналог монитора. С каждым Condition объектом связан Lock, необходимый дляjava.util.concurrent.locks.Conditionjava.util.concurrent.locks.ConditionЧто еще почитать
 Хорстманн К.С., Корнелл Г. – Java, том 2,



Слайды и текст этой презентации
Слайд 1
Описание слайда:
Лекции по Java SE Александр Харичкин, Performance Support Manager, NetCracker


Слайд 2
Описание слайда:
План лекции Многозадачность (multithreading) и Java API Поддержка многозадачности в Java Способы создания потока Управление потоком Потоки-демоны Приоритеты потоков Одновременный доступ (concurrency) и синхронизация Java Concurrency API

Слайд 3
Описание слайда:
Многозадачность (многопоточность) Поток – часть приложения, исполняющая определенную задачу Многозадачность – возможность исполнять несколько независимых задач одновременно Потоки разделяют все системные ресурсы, при этом память разделяют только взаимодействующие потоки ОС управляет исполнением потоков и их доступом к общим ресурсам

Слайд 4
Описание слайда:
Многозадачность в Java Java поддерживает многозадачность и предоставляет интерфейс управления потоками (каждый поток представляется экземпляром класса java.lang.Thread) Java предоставляет интерфейс взаимодействия между потоками Java поддерживает синхронизацию доступа к данным К примеру, Garbage Collector работает в отдельном потоке.

Слайд 5
Описание слайда:
Создание потока исполнения – способ №1 Способ №1: наследование от класса java.lang.Thread

Слайд 6
Описание слайда:
Создание потока исполнения – способ №2 Способ №2: реализация интерфейса java.lang.Runnable

Слайд 7
Описание слайда:
Управление исполнением потока public static void sleep(long millis) throws InterruptedException приостанавливает текущий поток как минимум на millis миллисекунд public static void yield() приостанавливает текущий поток, предоставляя возможность выполнять другие потоки (обычно необходимо в циклах, если там не вызывается sleep) public final void join() throws InterruptedException вводит текущий поток в ожидание завершения другого потока public final boolean isAlive() получает состояние потока (true – если поток запущен и выполняется, false – если поток не был запущен или завершился)

Слайд 8
Описание слайда:
Управление исполнением потока: прерывание Правильное прерывание потоков: public void interrupt() пытается выставить статус потока в “прерванный”, иначе (если поток находится в ожидании) очищает статус и порождает InterruptedException в потоке public boolean isInterrupted() - проверяет статус потока public static boolean interrupted() проверяет статус текущего потока, при этом очищая его Используя interrupt(), нельзя остановить поток без его “согласия” Чтобы поток можно было корректно остановить, вместо

Слайд 9
Описание слайда:
Потоки-демоны Демон – это поток, который может существовать неограниченное время. Если в программе остаются только потоки-демоны, то такая программа завершает работу. В противном случае она ожидает завершения всех потоков, не являющихся демонами. Назначение демонов – обслуживание других потоков Например, таймер API задание типа потока (true – демон, false – иначе): public final void setDaemon(boolean on) получение типа потока: public final boolean isDaemon()

Слайд 10
Описание слайда:
Приоритеты потоков Задание приоритета потока public final void setPriority(int newPriority); Приоритет изменяется от Thread.MIN_PRIORITY (1) до Thread.MAX_PRIORITY (10) включительно. Нормальный приоритет (default): Thread.NORM_PRIORITY (5). Получение приоритета потока public final int getPriority(); Количество уровней приоритетов зависит от конкретной платформы Не рекомендуется слишком полагаться на приоритеты (эффективность зависит от ОС, если она поддерживает приоритеты) Выставление высоких приоритетов у нескольких потоков может привести с тому, что поток с низким приоритетом не получит процессорного времени

Слайд 11
Описание слайда:
План лекции Многозадачность (multithreading) и Java API Одновременный доступ (concurrency) и синхронизация Проблемы одновременного доступа Синхронизация и ее недостатки Операции, не требующие синхронизации Блокирующие операции Монитор Java Concurrency API

Слайд 12
Описание слайда:
Проблемы одновременного доступа При неконтролируемом доступе разными потоками данные могут быть повреждены. Race condition – ошибка проектирования многозадачной системы, при которой работа системы зависит от того, в каком порядке выполняются части кода. Состояние гонки — специфический баг, проявляющийся в случайные моменты времени и «затихающий» при попытке его локализовать. В многопроцессорных системах необходима подгрузка разделяемых значений в память потока и запись в общую память. Критическая секция – часть программы, в которой осуществляется доступ к разделяемым данным. Должна одновременно исполняться не более, чем одним потоком.

Слайд 13
Описание слайда:
Синхронизация Синхронизированный блок

Слайд 14
Описание слайда:
Недостатки синхронизации Невозможно прервать поток, пытающийся получить блокировку. Невозможно задать тайм-аут для операции получения блокировки. В некоторых случаях единственное условие на операцию блокировки неэффективно. Примитивы JVM не всегда эффективно отображаются в возможности ОС. Механизм синхронизации весьма дорогостоящий (понижает скорость). Дополнительный внутренний учетный код. Синхронизацию рекомендуется использовать лишь там, где это нужно

Слайд 15
Описание слайда:
Операции, не требующие синхронизации Атомарные операции. Все операции над числами примитивного типа. Операции с полями типа final. Операции с полями типа volatile всегда атомарные При чтение значения volatile-переменной оно всегда читается из общей памяти. При записи значения volatile-переменной оно всегда пишется в общую память. Обращение к volatile переменным занимает больше времени (однако это не так расточительно как дополнительный блок synchronized). Операции над данными, доступными по volatile ссылке, могут быть не атомарны!

Слайд 16
Описание слайда:
Блокирующие операции Блокирующие вызовы (IO, network, …) внутри synchronized методов. При вызове sleep() ресурсы, монопольно используемые текущим потоком, остаются недоступными для других. Взаимные блокировки (deadlocks) – остановка потоков из-за взаимозависимости между общими синхронизированными ресурсами; выявляются трудно.

Слайд 17
Описание слайда:
Монитор Монитор (по определению) – объект класса, содержащего только закрытые поля. Но у мониторов Java поля необязательно закрытые. Любой Java-объект может быть монитором. Для взаимодействия с монитором поток должен иметь блокировку на него (синхронизироваться по нему). Методы монитора (класс Object): wait(), wait(time) – ожидание монитора. notify() – извещение одного из ждущих потоков (произвольного). notifyAll() – извещение всех ждущих потоков Для работы с монитором поток должен им владеть (т.е. исполнять код, синхронизованный по данному объекту)

Слайд 18
Описание слайда:
План лекции Многозадачность (multithreading) и Java API Одновременный доступ (concurrency) и синхронизация Java Concurrency API

Слайд 19
Описание слайда:
Java Concurrency API В Java 5 добавлены новые инструменты синхронизации (пакет java.util.concurrent), в том числе: Набор классов для атомарных операций с объектами (java.util.concurrent.atomic) Новые инструменты работы с блокировками (java.util.concurrent.locks) Синхронизованные аналоги некоторых классов из пакета java.util

Слайд 20
Описание слайда:
java.util.concurrent.atomic Набор классов с атомарными методами AtomicReference AtomicInteger … Основной метод всех этих классов: <V> boolean compareAndSet (V expected, V update) Атомарно проставляет новое значение, если текущее значение равно ожидаемому. Возвращает результат выполнения операции (успех/неудача). Метод реализуется через соответствующую инструкцию процессора, поэтому его грамотное использование позволяет повысить производительность по сравнению с блокировками. Кроме общих методов, некоторые классы предоставляют атомарные реализации специфических методов.

Слайд 21
Описание слайда:
java.util.concurrent.atomic – пример На основе классов пакета можно разрабатывать неблокирующие алгоритмы. К примеру, реализация метода AtomicInteger.incrementAndGet:

Слайд 22
Описание слайда:
java.util.concurrent.locks.Lock Расширенный функционал по сравнению с использованием synchronized. Простейший пример использования:

Слайд 23
Описание слайда:
java.util.concurrent.locks.Condition Аналог монитора. С каждым Condition объектом связан Lock, необходимый для работы с Condition-ом.

Слайд 24
Описание слайда:
java.util.concurrent.locks.Condition

Слайд 25
Описание слайда:
java.util.concurrent.locks.Condition

Слайд 26
Описание слайда:
Что еще почитать Хорстманн К.С., Корнелл Г. – Java, том 2, глава 1 API References for java.util.concurrent: http://download.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html Введение в неблокирующие алгоритмы: http://www.ibm.com/developerworks/ru/library/j-jtp04186/


Скачать презентацию на тему Лекции по Java SE Александр Харичкин, Performance Support Manager, NetCracker можно ниже:

Похожие презентации