Java осень 2013 лекция 2

44
Углубленное программирование на Java Лекция 2 «Многопоточность» Виталий Чибриков

Transcript of Java осень 2013 лекция 2

Page 1: Java осень 2013 лекция 2

Углубленное программирование

на JavaЛекция 2

«Многопоточность»

Виталий Чибриков

Page 2: Java осень 2013 лекция 2

План лекции

2

1. abstract, interface

2. Object

3. Generics

4. Iterable, Collections

5. Thread, Runnable

Page 3: Java осень 2013 лекция 2

Наследование в Java

Animal

<<abstract>>

- int weight

+ boolean isDangerous()

# int getWeight()

boolean isPredator()

Jumpable

<<interface>>

boolean canJump()

3

Page 4: Java осень 2013 лекция 2

Наследование в Java

Aminal

<<abstract>>

Jumpable

<<interface>>

Elefant

4

Page 5: Java осень 2013 лекция 2

Наследование в Java

ошибка

5

Page 6: Java осень 2013 лекция 2

AnimalMovable

<<interface>>

Elefant

Jumpable

<<interface>>

6

Page 7: Java осень 2013 лекция 2

План лекции

7

1. abstract, interface

2. Object

3. Generics

4. Iterable, Collections

5. Thread, Runnable

Page 8: Java осень 2013 лекция 2

8

Page 9: Java осень 2013 лекция 2

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()

Page 10: Java осень 2013 лекция 2

Основные методы класса Object

class Object

10

― класс от которого унаследованны все остальные классыclass Object

public Class<?> getClass()

public String toString()

public boolean equals(Object obj)

public int hashCode()

protected Object clone()

Page 11: Java осень 2013 лекция 2

Обертки простых типов

11

boolean, byte, char, short, int, float, long, double

Примитивные типы:

мало памяти

простая структура

Stack

Boolean, Byte, Character, Short, Integer, Float, Long, Double

Обертки простых типов:

наследники от Object

сложные типы

Heap

Page 12: Java осень 2013 лекция 2

Простые типы

12

bits type type

8 byte boolean

16 short char

32 int float

64 long double

Page 13: Java осень 2013 лекция 2

План лекции

13

1. abstract, interface

2. Object

3. Generics

4. Iterable, Collections

5. Thread, Runnable

Page 14: Java осень 2013 лекция 2

generics (templates)

Generic programming

N алгоритмов, M типов данных. N * M реализаций?

Алгоритмы работают с шаблонами => N реализаций

Универсальные алгоритмы

Примеры синтаксиса

― аглоритмы для типов, которые будут указыны позже

14

Page 15: Java осень 2013 лекция 2

generics vs inheritance

принцип «разновидность чего-то» (is a)

class Ветеринар<T extends Животное> extends Человек

T: Слон, Собака, Мышь

принцип «специализируется на» (of something)

В случае Т: Человек, получаем ветеринара по людям – врача

15

Пример

Шаблон

Наследование

Page 16: Java осень 2013 лекция 2

generics (templates)

16

Типизация значений

Page 17: Java осень 2013 лекция 2

Класс с шаблонным типом

17

Page 18: Java осень 2013 лекция 2

Метод с шаблонным типом

18

Page 19: Java осень 2013 лекция 2

class LongId<T>

19

Page 20: Java осень 2013 лекция 2

План лекции

20

1. abstract, interface

2. Object

3. Generics

4. Iterable, Collections

5. Thread, Runnable

Page 21: Java осень 2013 лекция 2

interface Iterable<T>

interface Iterator<T>

Iterator & Iterable

21

Iterator<T> iterator()

boolean hasNext()

void remove()

Object next()

Page 22: Java осень 2013 лекция 2

Иерархия контейнеров

22

Page 23: Java осень 2013 лекция 2

Методы

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()

Page 24: Java осень 2013 лекция 2

List, Set, Queue

24

List

Список с очередностью

LinkedList ― быстрое удаление и добавление элементов

ArrayList ― быстрый доступ по индексу

Set

Без очередности

Без индекса

Быстрый поиск элемента

Queue

FIFO

Page 25: Java осень 2013 лекция 2

Map<key, value>

Map

25

Быстрый поиск по ключу – get(key)

Объект в качестве value. Например другой контейнер (Map<Integer, List<T>>)

Set<keyType> keySet()

Collection<valueType> values()

Page 26: Java осень 2013 лекция 2

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

Page 27: Java осень 2013 лекция 2

Основные методы

class Collections

― набор статических методов для работы с контейнерами

Collections

27

Page 28: Java осень 2013 лекция 2

План лекции

28

1. abstract, interface

2. Object

3. Generics

4. Iterable, Collections

5. Thread, Runnable

Page 29: Java осень 2013 лекция 2

Processes and Threads

29

Процессы

Приложение со своим набором run-time ресурсов и собственной памятью

Взаимодействие через Inter Process Communication ресурсы

Можно запускать на нескольких компьютерах

Потоки

«Живут» в одном процессе

Старт приложения – создание main потока

Используют общую память (heap) и другие ресурсы приложения

Потоки могут порождать другие потоки и взаимодействовать с ними

Page 30: Java осень 2013 лекция 2

interface Runnable

30

Всего один метод – run()

Runnable

Поток это объект, реазизующий интерфейс Runnable

Page 31: Java осень 2013 лекция 2

class Thread

31

class MyThread extends Thread

Thread содержит метод start() ― запуск нового потока

сlass Thread реализует интерфейс Runnable

Page 32: Java осень 2013 лекция 2

Runnable

Runnable vs Thread

32

Runnable класс нужно передавать в конструктор Thread объекта

Можно наследовать класс отличный от Thread

Thread

Содержит методы управления потоком

Thread thread = Thread.currentThread();

Текущий Thread object можно получить в любом месте кода

Page 33: Java осень 2013 лекция 2

33

Thread thread = Thread.currentThread();

Некоторые методы

Page 34: Java осень 2013 лекция 2

sleep and interrupt

Если нужно остановить выполнение потока

Thread.sleep(1000) – остановит выполнение потока на 1 секунду

Если нужно прервать выполнение потока

thread.interrupt() – пошлет прерывание потоку thread

34

Page 35: Java осень 2013 лекция 2

Если надо остановить текущий поток до окончания другого потока

join

35

Текущий поток ждет пока завершиться поток thread

В текущем потоке вызываем thread.join().

Page 36: Java осень 2013 лекция 2

Взаимодействие потоков

У потоков общий Heap

Можно передать в два потока ссылку на один объект

Потоки смогут менять общий объект и взаимодействовать через него

36

Как осуществить взаимодействие между потоками?

Page 37: Java осень 2013 лекция 2

Java memory model

Memory model + volatile

37

volatile – не кэшировать, всегда считывать из общей памяти

Описывает то, как потоки должны взаимодействовать через общую память

Кэширование значений в многопроцессорных средах

Изменение порядка операций для оптимизации

Основные проблемы

final – не изменять значение переменной

synchronized – отметить участок кода доступный только одному треду

Инструменты для решения

Page 38: Java осень 2013 лекция 2

Synchronization

Демонстрация работы кода ThreadInterference.example();

Возможные ошибки одновременного доступа

Thread Interference – потеря результата

Memory Consistency Errors – ошибочное состояние общей памяти

38

Page 39: Java осень 2013 лекция 2

Synchronization

39

Synchronized methods

Synchronized statements

Page 40: Java осень 2013 лекция 2

Lock object (mutex)

40

Page 41: Java осень 2013 лекция 2

41

Page 42: Java осень 2013 лекция 2

Служба в отдельном потоке

42

Page 43: Java осень 2013 лекция 2

wait() and notify()

wait(), notify() и notifyAll() ― методы класса Object

object.wait() ― ждать в текущем потоке, пока не придет notify()

object.notify() ― сигнал «продолжить» первому кто начал wait()

object.notifyAll() ― сигнал «продолжить» всем кто начал wait()

Демонстрация работы кода RandomRunExample.example();

43

Page 44: Java осень 2013 лекция 2

Спасибо за внимание

Виталий Чибриков[email protected]