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

Post on 15-Jun-2015

260 views 3 download

Tags:

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

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

на 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

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

Виталий Чибриковchibrikov@corp.mail.ru