SlideShare a Scribd company logo
Углубленное
программирование
на Java
Лекция 2
«Многопоточность»
Виталий Чибриков
План лекции
1. abstract, interface
2. Object
3. Generics

4. Iterable, Collections
5. Thread, Runnable
2
Наследование в Java
<<abstract>>
Animal
- int weight

+ boolean isDangerous()
# int getWeight()

boolean isPredator()

<<interface>>
Jumpable

boolean canJump()

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

<<interface>>

<<abstract>>

Jumpable

Aminal

Elefant

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

ошибка

5
<<interface>>
Jumpable

<<interface>>

Animal

Movable

Elefant

6
План лекции
1. abstract, interface
2. Object
3. Generics

4. Iterable, Collections
5. Thread, Runnable
7
8
java.lang.Class
Class ― объект, который представляет в runtime данные о классе объекта
Основные методы класса Class
static Class<T> forName(String className)
String getCanonicalName()

Fields[] getField(String name)
Class[] getInterfaces()
Method[] getMethods()
Constructor[] getConstructors()

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

Основные методы класса Object
public Class<?> getClass()
public String toString()
public boolean equals(Object obj)

public int hashCode()
protected Object clone()
10
Обертки простых типов
boolean, byte, char, short, int, float, long, double
Примитивные типы:
мало памяти
простая структура
Stack

Boolean, Byte, Character, Short, Integer, Float, Long, Double
Обертки простых типов:
наследники от Object

сложные типы
Heap
11
Простые типы
bits

type

type

8

byte

boolean

16

short

char

32

int

float

64

long

double

12
План лекции
1. abstract, interface
2. Object
3. Generics

4. Iterable, Collections
5. Thread, Runnable
13
generics (templates)
Generic programming ― аглоритмы для типов, которые будут указыны позже
Универсальные алгоритмы
N алгоритмов, M типов данных. N * M реализаций?
Алгоритмы работают с шаблонами => N реализаций
Примеры синтаксиса

14
generics vs inheritance
Наследование
принцип «разновидность чего-то» (is a)

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

Пример
class Ветеринар<T extends Животное> extends Человек
T: Слон, Собака, Мышь
В случае Т: Человек, получаем ветеринара по людям – врача

15
generics (templates)
Типизация значений

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

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

18
class LongId<T>

19
План лекции
1. abstract, interface
2. Object
3. Generics

4. Iterable, Collections
5. Thread, Runnable
20
Iterator & Iterable
interface Iterator<T>
boolean hasNext()
Object next()
void remove()

interface Iterable<T>
Iterator<T> iterator()

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

22
Collection
extends Iterable<T>

Методы
add(T object)
addAll(Collection<T> coll)
clear()
contains(Object o)
remove(Object o)

removeAll(Collection<T> coll)
size()
isEmpty()
23
List, Set, Queue
List
Список с очередностью
LinkedList ― быстрое удаление и добавление элементов
ArrayList ― быстрый доступ по индексу

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

Queue
FIFO
24
Map
Map<key, value>
Быстрый поиск по ключу – get(key)
Объект в качестве value. Например другой контейнер (Map<Integer, List<T>>)
Set<keyType> keySet()
Collection<valueType> values()

25
Comparable
interface Comparable<T>
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
26
class Collections

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

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

27
План лекции
1. abstract, interface
2. Object
3. Generics

4. Iterable, Collections
5. Thread, Runnable
28
Processes and Threads
Процессы
Приложение со своим набором run-time ресурсов и собственной памятью
Взаимодействие через Inter Process Communication ресурсы
Можно запускать на нескольких компьютерах

Потоки
«Живут» в одном процессе
Используют общую память (heap) и другие ресурсы приложения
Старт приложения – создание main потока

Потоки могут порождать другие потоки и взаимодействовать с ними
29
interface Runnable
Runnable
Поток это объект, реазизующий интерфейс Runnable
Всего один метод – run()

30
class Thread
class MyThread extends Thread
сlass Thread реализует интерфейс Runnable
Thread содержит метод start() ― запуск нового потока

31
Runnable vs Thread
Runnable
Можно наследовать класс отличный от Thread
Runnable класс нужно передавать в конструктор Thread объекта

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

Thread thread = Thread.currentThread();
Текущий Thread object можно получить в любом месте кода
32
Thread thread = Thread.currentThread();

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

33
sleep and interrupt
Если нужно остановить выполнение потока
Thread.sleep(1000) – остановит выполнение потока на 1 секунду

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

34
join
Если надо остановить текущий поток до окончания другого потока
В текущем потоке вызываем thread.join().
Текущий поток ждет пока завершиться поток thread

35
Взаимодействие потоков
Как осуществить взаимодействие между потоками?
У потоков общий Heap
Можно передать в два потока ссылку на один объект
Потоки смогут менять общий объект и взаимодействовать через него

36
Memory model + volatile
Java memory model
Описывает то, как потоки должны взаимодействовать через общую память
Основные проблемы
Кэширование значений в многопроцессорных средах
Изменение порядка операций для оптимизации
Инструменты для решения
final – не изменять значение переменной
volatile – не кэшировать, всегда считывать из общей памяти
synchronized – отметить участок кода доступный только одному треду
37
Synchronization
Возможные ошибки одновременного доступа
Thread Interference – потеря результата

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

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

38
Synchronization
Synchronized methods

Synchronized statements

39
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

More Related Content

What's hot (20)

PDF
Лекция 2. Алгоритмы сортировки
Mikhail Kurnosov
 
PDF
Лекция 3: Бинарный поиск. Связные списки
Mikhail Kurnosov
 
PDF
Алгоритмы и структуры данных осень 2013 лекция 1
Technopark
 
PDF
Алгоритмы и структуры данных осень 2013 лекция 3
Technopark
 
PDF
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Mikhail Kurnosov
 
PDF
Лекция 11. Методы разработки алгоритмов
Mikhail Kurnosov
 
PDF
Лекция 4. Префиксные деревья (tries, prefix trees)
Mikhail Kurnosov
 
PDF
Алгоритмы и структуры данных осень 2013 лекция 2
Technopark
 
PPT
5. java lecture io
MERA_school
 
PDF
Лекция 7: Очереди с приоритетами. Бинарные кучи (пирамиды)
Mikhail Kurnosov
 
PPT
05 динамическое программирование
Fedor Tsarev
 
PPT
05 динамическое программирование
Fedor Tsarev
 
PDF
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Mikhail Kurnosov
 
PDF
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Mikhail Kurnosov
 
PDF
Лекция 4: Стек. Очередь
Mikhail Kurnosov
 
PPT
04 динамическое программирование - основные концепции
Fedor Tsarev
 
PPT
Discovering Lambdas (Speech)
Olexandra Dmytrenko
 
PDF
2.4 Использование указателей
DEVTYPE
 
PDF
Алгоритмы и структуры данных весна 2014 лекция 2
Technopark
 
PPT
Алгоритмы сортировки
Нижегородский институт управления
 
Лекция 2. Алгоритмы сортировки
Mikhail Kurnosov
 
Лекция 3: Бинарный поиск. Связные списки
Mikhail Kurnosov
 
Алгоритмы и структуры данных осень 2013 лекция 1
Technopark
 
Алгоритмы и структуры данных осень 2013 лекция 3
Technopark
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Mikhail Kurnosov
 
Лекция 11. Методы разработки алгоритмов
Mikhail Kurnosov
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Mikhail Kurnosov
 
Алгоритмы и структуры данных осень 2013 лекция 2
Technopark
 
5. java lecture io
MERA_school
 
Лекция 7: Очереди с приоритетами. Бинарные кучи (пирамиды)
Mikhail Kurnosov
 
05 динамическое программирование
Fedor Tsarev
 
05 динамическое программирование
Fedor Tsarev
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Mikhail Kurnosov
 
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Mikhail Kurnosov
 
Лекция 4: Стек. Очередь
Mikhail Kurnosov
 
04 динамическое программирование - основные концепции
Fedor Tsarev
 
Discovering Lambdas (Speech)
Olexandra Dmytrenko
 
2.4 Использование указателей
DEVTYPE
 
Алгоритмы и структуры данных весна 2014 лекция 2
Technopark
 

Viewers also liked (18)

PDF
Java осень 2013 лекция 5
Technopark
 
PDF
Java осень 2014 занятие 7
Technopark
 
PDF
Java осень 2014 занятие 1
Technopark
 
PDF
Java весна 2014 лекция 2
Technopark
 
PDF
Java осень 2013 лекция 3
Technopark
 
PDF
Java весна 2014 лекция 5
Technopark
 
PDF
Java осень 2013 лекция 5-1
Technopark
 
PDF
Java осень 2013 лекция 8
Technopark
 
PDF
Java осень 2013 лекция 7
Technopark
 
PDF
Java осень 2014 занятие 5
Technopark
 
PDF
Java осень 2013 лекция 1-2
Technopark
 
PDF
Java осень 2014 занятие 8
Technopark
 
PDF
Java осень 2013 лекция 6
Technopark
 
PDF
Java осень 2014 занятие 2
Technopark
 
PDF
Java осень 2014 занятие 6
Technopark
 
PDF
Java весна 2014 лекция 1
Technopark
 
PDF
Java осень 2014 занятие 3
Technopark
 
PDF
Java осень 2013 лекция 1-1
Technopark
 
Java осень 2013 лекция 5
Technopark
 
Java осень 2014 занятие 7
Technopark
 
Java осень 2014 занятие 1
Technopark
 
Java весна 2014 лекция 2
Technopark
 
Java осень 2013 лекция 3
Technopark
 
Java весна 2014 лекция 5
Technopark
 
Java осень 2013 лекция 5-1
Technopark
 
Java осень 2013 лекция 8
Technopark
 
Java осень 2013 лекция 7
Technopark
 
Java осень 2014 занятие 5
Technopark
 
Java осень 2013 лекция 1-2
Technopark
 
Java осень 2014 занятие 8
Technopark
 
Java осень 2013 лекция 6
Technopark
 
Java осень 2014 занятие 2
Technopark
 
Java осень 2014 занятие 6
Technopark
 
Java весна 2014 лекция 1
Technopark
 
Java осень 2014 занятие 3
Technopark
 
Java осень 2013 лекция 1-1
Technopark
 
Ad

Similar to Java осень 2013 лекция 2 (20)

PDF
C++ STL & Qt. Занятие 01.
Igor Shkulipa
 
PDF
Lambdas in java 8
chashnikov
 
PPT
Лекция 6
itc73
 
PPT
9. java lecture library
MERA_school
 
PPT
Oop java.generics
muqaddas_m
 
PDF
Лекция 5. Встроенные коллекции и модуль collections.
Roman Brovko
 
PPT
паттерны программирования
guestfc8ae0
 
PDF
Мир Python функционалим с помощью библиотек
PyNSK
 
PDF
Scala on android
Valeriya Atamanova
 
PPTX
Reactive extensions
Sergey Teplyakov
 
PDF
Lec 3
Alexander Rusin
 
PPTX
Java Core. Lecture# 4. Collections.
Anton Moiseenko
 
PDF
Рекурсия. Поиск
Olexandra Dmytrenko
 
PPTX
Deep Dive C# by Sergey Teplyakov
Alex Tumanoff
 
PPT
Java. Методы
Unguryan Vitaliy
 
PPTX
Clojure: Lisp for the modern world (русская версия)
Alex Ott
 
PPTX
PHP7 - что ожидать?
Дмитрий Золотов
 
PPTX
Java8. Innovations
Nakraynikov Oleg
 
PPTX
Svitla .Net meetup in Kiev, Anzhiiak Oleksii
Svitla Systems Inc.
 
PPTX
C#. От основ к эффективному коду
Vasiliy Deynega
 
C++ STL & Qt. Занятие 01.
Igor Shkulipa
 
Lambdas in java 8
chashnikov
 
Лекция 6
itc73
 
9. java lecture library
MERA_school
 
Oop java.generics
muqaddas_m
 
Лекция 5. Встроенные коллекции и модуль collections.
Roman Brovko
 
паттерны программирования
guestfc8ae0
 
Мир Python функционалим с помощью библиотек
PyNSK
 
Scala on android
Valeriya Atamanova
 
Reactive extensions
Sergey Teplyakov
 
Java Core. Lecture# 4. Collections.
Anton Moiseenko
 
Рекурсия. Поиск
Olexandra Dmytrenko
 
Deep Dive C# by Sergey Teplyakov
Alex Tumanoff
 
Java. Методы
Unguryan Vitaliy
 
Clojure: Lisp for the modern world (русская версия)
Alex Ott
 
PHP7 - что ожидать?
Дмитрий Золотов
 
Java8. Innovations
Nakraynikov Oleg
 
Svitla .Net meetup in Kiev, Anzhiiak Oleksii
Svitla Systems Inc.
 
C#. От основ к эффективному коду
Vasiliy Deynega
 
Ad

More from Technopark (20)

PDF
Лекция 11. Вычислительная модель Pregel
Technopark
 
PDF
Лекция 14. Hadoop в Поиске Mail.Ru
Technopark
 
PDF
Лекция 13. YARN
Technopark
 
PDF
Лекция 12. Spark
Technopark
 
PDF
Лекция 10. Apache Mahout
Technopark
 
PDF
Лекция 9. ZooKeeper
Technopark
 
PDF
Лекция 7. Введение в Pig и Hive
Technopark
 
PDF
Лекция 6. MapReduce в Hadoop (графы)
Technopark
 
PDF
Лекция 5. MapReduce в Hadoop (алгоритмы)
Technopark
 
PDF
Лекция 4. MapReduce в Hadoop (введение)
Technopark
 
PDF
Лекция 3. Распределённая файловая система HDFS
Technopark
 
PDF
Лекция 2. Основы Hadoop
Technopark
 
PDF
Лекция 1. Введение в Big Data и MapReduce
Technopark
 
PPTX
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
Technopark
 
PPT
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
Technopark
 
PPTX
СУБД 2013 Лекция №9 "Безопасность баз данных"
Technopark
 
PPTX
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
Technopark
 
PPTX
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
Technopark
 
PPTX
СУБД 2013 Лекция №5 "Определение узких мест"
Technopark
 
PPTX
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
Technopark
 
Лекция 11. Вычислительная модель Pregel
Technopark
 
Лекция 14. Hadoop в Поиске Mail.Ru
Technopark
 
Лекция 13. YARN
Technopark
 
Лекция 12. Spark
Technopark
 
Лекция 10. Apache Mahout
Technopark
 
Лекция 9. ZooKeeper
Technopark
 
Лекция 7. Введение в Pig и Hive
Technopark
 
Лекция 6. MapReduce в Hadoop (графы)
Technopark
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Technopark
 
Лекция 4. MapReduce в Hadoop (введение)
Technopark
 
Лекция 3. Распределённая файловая система HDFS
Technopark
 
Лекция 2. Основы Hadoop
Technopark
 
Лекция 1. Введение в Big Data и MapReduce
Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
Technopark
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
Technopark
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
Technopark
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
Technopark
 
СУБД 2013 Лекция №5 "Определение узких мест"
Technopark
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
Technopark
 

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