Upload
technopark
View
256
Download
3
Tags:
Embed Size (px)
Citation preview
Углубленное программирование
на JavaЛекция 2
«Многопоточность»
Виталий Чибриков
План лекции
2
1. abstract, interface
2. Object
3. Generics
4. Iterable, Collections
5. Thread, Runnable
Наследование в Java
Animal
<<abstract>>
- int weight
+ boolean isDangerous()
# int getWeight()
boolean isPredator()
Jumpable
<<interface>>
boolean canJump()
3
Наследование в Java
Aminal
<<abstract>>
Jumpable
<<interface>>
Elefant
4
Наследование в Java
ошибка
5
AnimalMovable
<<interface>>
Elefant
Jumpable
<<interface>>
6
План лекции
7
1. abstract, interface
2. Object
3. Generics
4. Iterable, Collections
5. Thread, Runnable
8
java.lang.Class
9
― объект, который представляет в runtime данные о классе объектаClass
Основные методы класса Class
static Class<T> forName(String className)
String getCanonicalName()
Fields[] getField(String name)
Class[] getInterfaces()
Method[] getMethods()
Constructor[] getConstructors()
Основные методы класса Object
class Object
10
― класс от которого унаследованны все остальные классыclass Object
public Class<?> getClass()
public String toString()
public boolean equals(Object obj)
public int hashCode()
protected Object clone()
Обертки простых типов
11
boolean, byte, char, short, int, float, long, double
Примитивные типы:
мало памяти
простая структура
Stack
Boolean, Byte, Character, Short, Integer, Float, Long, Double
Обертки простых типов:
наследники от Object
сложные типы
Heap
Простые типы
12
bits type type
8 byte boolean
16 short char
32 int float
64 long double
План лекции
13
1. abstract, interface
2. Object
3. Generics
4. Iterable, Collections
5. Thread, Runnable
generics (templates)
Generic programming
N алгоритмов, M типов данных. N * M реализаций?
Алгоритмы работают с шаблонами => N реализаций
Универсальные алгоритмы
Примеры синтаксиса
― аглоритмы для типов, которые будут указыны позже
14
generics vs inheritance
принцип «разновидность чего-то» (is a)
class Ветеринар<T extends Животное> extends Человек
T: Слон, Собака, Мышь
принцип «специализируется на» (of something)
В случае Т: Человек, получаем ветеринара по людям – врача
15
Пример
Шаблон
Наследование
generics (templates)
16
Типизация значений
Класс с шаблонным типом
17
Метод с шаблонным типом
18
class LongId<T>
19
План лекции
20
1. abstract, interface
2. Object
3. Generics
4. Iterable, Collections
5. Thread, Runnable
interface Iterable<T>
interface Iterator<T>
Iterator & Iterable
21
Iterator<T> iterator()
boolean hasNext()
void remove()
Object next()
Иерархия контейнеров
22
Методы
Collection
23
extends Iterable<T>
add(T object)
addAll(Collection<T> coll)
clear()
contains(Object o)
remove(Object o)
removeAll(Collection<T> coll)
size()
isEmpty()
List, Set, Queue
24
List
Список с очередностью
LinkedList ― быстрое удаление и добавление элементов
ArrayList ― быстрый доступ по индексу
Set
Без очередности
Без индекса
Быстрый поиск элемента
Queue
FIFO
Map<key, value>
Map
25
Быстрый поиск по ключу – get(key)
Объект в качестве value. Например другой контейнер (Map<Integer, List<T>>)
Set<keyType> keySet()
Collection<valueType> values()
interface Comparable<T>
Comparable
26
int compareTo(T o)
Возвращаемое значение типа int может быть >, =, < нуля
Integer a = 1;
Integer b = 2;
a.compareTo( b ) == -1; // true
a.compareTo( a ) == 0; // true
b.compareTo( a ) == 1; // true
Основные методы
class Collections
― набор статических методов для работы с контейнерами
Collections
27
План лекции
28
1. abstract, interface
2. Object
3. Generics
4. Iterable, Collections
5. Thread, Runnable
Processes and Threads
29
Процессы
Приложение со своим набором run-time ресурсов и собственной памятью
Взаимодействие через Inter Process Communication ресурсы
Можно запускать на нескольких компьютерах
Потоки
«Живут» в одном процессе
Старт приложения – создание main потока
Используют общую память (heap) и другие ресурсы приложения
Потоки могут порождать другие потоки и взаимодействовать с ними
interface Runnable
30
Всего один метод – run()
Runnable
Поток это объект, реазизующий интерфейс Runnable
class Thread
31
class MyThread extends Thread
Thread содержит метод start() ― запуск нового потока
сlass Thread реализует интерфейс Runnable
Runnable
Runnable vs Thread
32
Runnable класс нужно передавать в конструктор Thread объекта
Можно наследовать класс отличный от Thread
Thread
Содержит методы управления потоком
Thread thread = Thread.currentThread();
Текущий Thread object можно получить в любом месте кода
33
Thread thread = Thread.currentThread();
Некоторые методы
sleep and interrupt
Если нужно остановить выполнение потока
Thread.sleep(1000) – остановит выполнение потока на 1 секунду
Если нужно прервать выполнение потока
thread.interrupt() – пошлет прерывание потоку thread
34
Если надо остановить текущий поток до окончания другого потока
join
35
Текущий поток ждет пока завершиться поток thread
В текущем потоке вызываем thread.join().
Взаимодействие потоков
У потоков общий Heap
Можно передать в два потока ссылку на один объект
Потоки смогут менять общий объект и взаимодействовать через него
36
Как осуществить взаимодействие между потоками?
Java memory model
Memory model + volatile
37
volatile – не кэшировать, всегда считывать из общей памяти
Описывает то, как потоки должны взаимодействовать через общую память
Кэширование значений в многопроцессорных средах
Изменение порядка операций для оптимизации
Основные проблемы
final – не изменять значение переменной
synchronized – отметить участок кода доступный только одному треду
Инструменты для решения
Synchronization
Демонстрация работы кода ThreadInterference.example();
Возможные ошибки одновременного доступа
Thread Interference – потеря результата
Memory Consistency Errors – ошибочное состояние общей памяти
38
Synchronization
39
Synchronized methods
Synchronized statements
Lock object (mutex)
40
41
Служба в отдельном потоке
42
wait() and notify()
wait(), notify() и notifyAll() ― методы класса Object
object.wait() ― ждать в текущем потоке, пока не придет notify()
object.notify() ― сигнал «продолжить» первому кто начал wait()
object.notifyAll() ― сигнал «продолжить» всем кто начал wait()
Демонстрация работы кода RandomRunExample.example();
43
Спасибо за внимание
Виталий Чибриков[email protected]