SlideShare a Scribd company logo
Курс по Java, 2016
Зависимости, итераторы,
многопоточность
Jar, Iterable, Iterator, Concurrency, Synchronization
Курс по Java, 2016
Зависимости
Курс по Java, 2016
Jar with dependencies
Все зависимости — в одном архиве
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
Курс по Java, 2016
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive><manifest>
<mainClass>com.example.Bootstrap</mainClass>
</manifest></archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals><goal>single</goal></goals>
</execution>
</executions>
Курс по Java, 2016
Maven Assembly Plugin
Собираем:
mvn package
Запускаем:
java -jar target/MyApp-1.0-SNAPSHOT-jar-with-dependencies.
jar
Курс по Java, 2016
Цикл for-each
List<String> list;
for (String s : list) {
// что-то делаем с s
}
Курс по Java, 2016
На самом деле это итератор
List<String> list;
Iterator<String> i = list.iterator();
while (i.hasNext()) {
String s = i.next();
// что-то делаем с s
}
Курс по Java, 2016
java.lang.Iterable<E>
Iterable<E> iterable;
Iterator<E> iterator = iterable.iterator();
Курс по Java, 2016
java.util.Iterator<E>
Iterator<E> iterator;
boolean hasNextItem = iterator.hasNext();
// есть следующий элемент?
E nextItem = iterator.next();
// давай следующий элемент
iterator.remove();
// удали текущий элемент
Курс по Java, 2016
Итератор
Курс по Java, 2016
Частичная реализация интерфейса
@Override
public void remove() {
throw new UnsupportedOperationException(
"MyIterator cannot remove");
}
Курс по Java, 2016
Потоки
Курс по Java, 2016
java.lang.Runnable
private static class IncThread implements Runnable {
private final TheNumber num;
public IncThread(TheNumber num) {
this.num = num;
}
@Override
public void run() {
num.setNum(num.getNum() + 1);
}
}
Курс по Java, 2016
java.lang.Thread
public static void main(String[] args)
throws InterruptedException {
TheNumber num = new TheNumber();
Thread thread1 = new Thread(new IncThread(num));
Thread thread2 = new Thread(new IncThread(num));
thread1.start();
thread2.start();
thread1.join();
thread2.join();
System.out.println(num);
Курс по Java, 2016
Гонки
Курс по Java, 2016
Синхронизация
@Override
public void run() {
synchronized (num) {
num.setNum(num.getNum() + 1);
}
}
Курс по Java, 2016
Синхронизация
private static class TheNumber {
private long n = 42;
public synchronized void setNum(long n) {
this.n = n;
}
public synchronized long getNum() {
return this.n;
}
}
Помогает
не всегда!
Курс по Java, 2016
Синхронизированные коллекции
List<String> syncList =
Collections.synchronizedList(
new ArrayList<String>());
Map<Integer, String> syncMap =
Collections.synchronizedMap(
new HashMap<Integer, String>());
Курс по Java, 2016
java.util.concurrent
Map<Integer, String> concurrentMap =
new ConcurrentHashMap<Integer, String>();
List<String> concurrentList =
new CopyOnWriteArrayList<String>();
Queue<String> concurrentQueue =
new ConcurrentLinkedQueue<String>();
Курс по Java, 2016
Осторожно, многопоточность
Курс по Java, 2016
Домашнее задание
Довести до ума алгоритм расстановки отступов и переводов строк (можно со
switch).
Минимальная внешняя конфигурация: размер отступа на блок и символ
отступа, символ перевода строки.
100% покрытие тестами всех Reader/Writer и Formatter (кроме main()).
ДЗ присылать на указанные емэйлы до 22:00 вторника, 10 мая 2016. Если
хотите получить персональный ответ, присылайте до 22:00 8-го мая 2016
года.
annie.tarasenko@7bits.it denis.nelubin@7bits.it

More Related Content

What's hot (20)

PPTX
Зачем нужна Scala?
Vasil Remeniuk
 
ODP
Скриптовой язык Groovy и его применение в рамках разработки ПО
Fedor Malyshkin
 
PPT
CodeFest 2012. Захаров М. — Опыт разработки и внедрения решений интеграционно...
CodeFest
 
PPTX
Система обработки бизнес-логики server-side приложения на Groovy
Regn
 
PPTX
Java Core. Lecture# 3. Part# 3. Multithreading.
Anton Moiseenko
 
PPTX
Java Core. Lecture# 5. Concurrency.
Anton Moiseenko
 
PDF
Загрузчики классов в Java - коллекция граблей
Anton Arhipov
 
PPTX
Java Core. Lecture# 3. Part# 2. Exceptions.
Anton Moiseenko
 
PPTX
Konstantin slisenko - Spring Framework
beloslab
 
PPTX
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Andrey Rebrov
 
PPTX
Автоматизация тестирования многопоточности
SQALab
 
PDF
Многопоточное программирование на C#, путевые заметки
DotNetConf
 
PDF
C++ STL & Qt. Занятие 05.
Igor Shkulipa
 
PPT
Введение в Spring
Unguryan Vitaliy
 
PDF
JavaScript Базовый. Занятие 04.
Igor Shkulipa
 
PDF
Java осень 2014 занятие 3
Technopark
 
PDF
RxJava
AnjLab
 
PPTX
Java Core. Lecture# 1. Intro
Anton Moiseenko
 
PDF
Lift, play, akka, rails part1
Eduard Antsupov
 
Зачем нужна Scala?
Vasil Remeniuk
 
Скриптовой язык Groovy и его применение в рамках разработки ПО
Fedor Malyshkin
 
CodeFest 2012. Захаров М. — Опыт разработки и внедрения решений интеграционно...
CodeFest
 
Система обработки бизнес-логики server-side приложения на Groovy
Regn
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Anton Moiseenko
 
Java Core. Lecture# 5. Concurrency.
Anton Moiseenko
 
Загрузчики классов в Java - коллекция граблей
Anton Arhipov
 
Java Core. Lecture# 3. Part# 2. Exceptions.
Anton Moiseenko
 
Konstantin slisenko - Spring Framework
beloslab
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Andrey Rebrov
 
Автоматизация тестирования многопоточности
SQALab
 
Многопоточное программирование на C#, путевые заметки
DotNetConf
 
C++ STL & Qt. Занятие 05.
Igor Shkulipa
 
Введение в Spring
Unguryan Vitaliy
 
JavaScript Базовый. Занятие 04.
Igor Shkulipa
 
Java осень 2014 занятие 3
Technopark
 
RxJava
AnjLab
 
Java Core. Lecture# 1. Intro
Anton Moiseenko
 
Lift, play, akka, rails part1
Eduard Antsupov
 

Viewers also liked (20)

PPTX
Стажировка-2015. Разработка. Занятие 14. Twitter Flight
7bits
 
PPTX
Спецкурс-2015. Занятие 04 (часть 1). Конфигурации, сборка проекта, автоматизи...
7bits
 
PDF
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
7bits
 
PPTX
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
7bits
 
PPTX
Спецкурс-2015. Занятие 05. Системы контроля версий
7bits
 
PPTX
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
7bits
 
PPTX
Курс Java-2016. Занятие 13. Spring
7bits
 
PDF
Курс Java-2016. Занятие 11. Servlets, JSP
7bits
 
PDF
Стажировка 2015. Разработка. Занятие 5. Использование nginx
7bits
 
PPTX
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
7bits
 
PPTX
Стажировка-2014, занятие 8. Общая архитектура web-приложений, web frameworks
7bits
 
PDF
Курс Java-2016. Занятие 09. Web
7bits
 
PDF
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
7bits
 
PPTX
Стажировка-2015. Разработка. Занятие 4. Системы контроля версий
7bits
 
PPTX
Спецкурс 2014, занятие 3. Абстракции, именование, документирование
7bits
 
PPTX
Стажировка-2014, занятие 6 (часть 1). Web-приложения
7bits
 
PPTX
Стажировка-2014, занятие 9. Code conventions and best practices
7bits
 
PPTX
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4
7bits
 
PPTX
Cпецкурс 2014, занятие 9 (1 часть). Языки разметки
7bits
 
PDF
Стажировка-2015. Дизайн. Занятие 4 (2 часть). Цвет в web-дизайне
7bits
 
Стажировка-2015. Разработка. Занятие 14. Twitter Flight
7bits
 
Спецкурс-2015. Занятие 04 (часть 1). Конфигурации, сборка проекта, автоматизи...
7bits
 
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
7bits
 
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
7bits
 
Спецкурс-2015. Занятие 05. Системы контроля версий
7bits
 
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
7bits
 
Курс Java-2016. Занятие 13. Spring
7bits
 
Курс Java-2016. Занятие 11. Servlets, JSP
7bits
 
Стажировка 2015. Разработка. Занятие 5. Использование nginx
7bits
 
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
7bits
 
Стажировка-2014, занятие 8. Общая архитектура web-приложений, web frameworks
7bits
 
Курс Java-2016. Занятие 09. Web
7bits
 
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
7bits
 
Стажировка-2015. Разработка. Занятие 4. Системы контроля версий
7bits
 
Спецкурс 2014, занятие 3. Абстракции, именование, документирование
7bits
 
Стажировка-2014, занятие 6 (часть 1). Web-приложения
7bits
 
Стажировка-2014, занятие 9. Code conventions and best practices
7bits
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4
7bits
 
Cпецкурс 2014, занятие 9 (1 часть). Языки разметки
7bits
 
Стажировка-2015. Дизайн. Занятие 4 (2 часть). Цвет в web-дизайне
7bits
 
Ad

Similar to Курс Java-2016. Занятие 08. Итераторы, многопоточность (11)

PDF
Java осень 2013 лекция 2
Technopark
 
PDF
Java весна 2014 лекция 5
Technopark
 
PPT
8. java lecture threads
MERA_school
 
PPTX
Android - 03 - Multithreading, Collections
Noveo
 
PPTX
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Fedor Lavrentyev
 
PDF
Синхронизация без блокировок и СМС
Alexey Fyodorov
 
PPTX
javaaaaddawdawdawdasdsadsaddadadm11n.pptx
ssuserb46e0b
 
PDF
Java 9: what is there beyond modularization
Ivan Krylov
 
PDF
Atomics, CAS and Nonblocking algorithms
Alexey Fyodorov
 
PPTX
Multithreading in java past and actual
Yevgen Levik
 
PDF
11 - Java. Многопоточность в Java: средства стандартной библиотеки
Roman Brovko
 
Java осень 2013 лекция 2
Technopark
 
Java весна 2014 лекция 5
Technopark
 
8. java lecture threads
MERA_school
 
Android - 03 - Multithreading, Collections
Noveo
 
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Fedor Lavrentyev
 
Синхронизация без блокировок и СМС
Alexey Fyodorov
 
javaaaaddawdawdawdasdsadsaddadadm11n.pptx
ssuserb46e0b
 
Java 9: what is there beyond modularization
Ivan Krylov
 
Atomics, CAS and Nonblocking algorithms
Alexey Fyodorov
 
Multithreading in java past and actual
Yevgen Levik
 
11 - Java. Многопоточность в Java: средства стандартной библиотеки
Roman Brovko
 
Ad

More from 7bits (12)

PDF
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
7bits
 
PDF
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
7bits
 
PDF
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
7bits
 
PDF
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
7bits
 
PDF
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
7bits
 
PDF
Goodbye, IT-loft! Тараканов Алексей: Идеология в IT
7bits
 
PPTX
Курс Java-2016. Занятие 05. Тестирование и Java
7bits
 
PDF
Курс Java-2016. Занятие 04 (часть 2). Git и GitHub
7bits
 
PPTX
Курс Java-2016. Занятие 01. Введение в Java как технологию
7bits
 
PPTX
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...
7bits
 
PPTX
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
7bits
 
PDF
Стажировка 2015. Разработка. Занятие 9. BEM
7bits
 
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
7bits
 
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
7bits
 
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
7bits
 
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
7bits
 
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
7bits
 
Goodbye, IT-loft! Тараканов Алексей: Идеология в IT
7bits
 
Курс Java-2016. Занятие 05. Тестирование и Java
7bits
 
Курс Java-2016. Занятие 04 (часть 2). Git и GitHub
7bits
 
Курс Java-2016. Занятие 01. Введение в Java как технологию
7bits
 
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...
7bits
 
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
7bits
 
Стажировка 2015. Разработка. Занятие 9. BEM
7bits
 

Курс Java-2016. Занятие 08. Итераторы, многопоточность

  • 1. Курс по Java, 2016 Зависимости, итераторы, многопоточность Jar, Iterable, Iterator, Concurrency, Synchronization
  • 2. Курс по Java, 2016 Зависимости
  • 3. Курс по Java, 2016 Jar with dependencies Все зависимости — в одном архиве <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.6</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest>
  • 4. Курс по Java, 2016 <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive><manifest> <mainClass>com.example.Bootstrap</mainClass> </manifest></archive> </configuration> <executions> <execution> <phase>package</phase> <goals><goal>single</goal></goals> </execution> </executions>
  • 5. Курс по Java, 2016 Maven Assembly Plugin Собираем: mvn package Запускаем: java -jar target/MyApp-1.0-SNAPSHOT-jar-with-dependencies. jar
  • 6. Курс по Java, 2016 Цикл for-each List<String> list; for (String s : list) { // что-то делаем с s }
  • 7. Курс по Java, 2016 На самом деле это итератор List<String> list; Iterator<String> i = list.iterator(); while (i.hasNext()) { String s = i.next(); // что-то делаем с s }
  • 8. Курс по Java, 2016 java.lang.Iterable<E> Iterable<E> iterable; Iterator<E> iterator = iterable.iterator();
  • 9. Курс по Java, 2016 java.util.Iterator<E> Iterator<E> iterator; boolean hasNextItem = iterator.hasNext(); // есть следующий элемент? E nextItem = iterator.next(); // давай следующий элемент iterator.remove(); // удали текущий элемент
  • 10. Курс по Java, 2016 Итератор
  • 11. Курс по Java, 2016 Частичная реализация интерфейса @Override public void remove() { throw new UnsupportedOperationException( "MyIterator cannot remove"); }
  • 12. Курс по Java, 2016 Потоки
  • 13. Курс по Java, 2016 java.lang.Runnable private static class IncThread implements Runnable { private final TheNumber num; public IncThread(TheNumber num) { this.num = num; } @Override public void run() { num.setNum(num.getNum() + 1); } }
  • 14. Курс по Java, 2016 java.lang.Thread public static void main(String[] args) throws InterruptedException { TheNumber num = new TheNumber(); Thread thread1 = new Thread(new IncThread(num)); Thread thread2 = new Thread(new IncThread(num)); thread1.start(); thread2.start(); thread1.join(); thread2.join(); System.out.println(num);
  • 15. Курс по Java, 2016 Гонки
  • 16. Курс по Java, 2016 Синхронизация @Override public void run() { synchronized (num) { num.setNum(num.getNum() + 1); } }
  • 17. Курс по Java, 2016 Синхронизация private static class TheNumber { private long n = 42; public synchronized void setNum(long n) { this.n = n; } public synchronized long getNum() { return this.n; } } Помогает не всегда!
  • 18. Курс по Java, 2016 Синхронизированные коллекции List<String> syncList = Collections.synchronizedList( new ArrayList<String>()); Map<Integer, String> syncMap = Collections.synchronizedMap( new HashMap<Integer, String>());
  • 19. Курс по Java, 2016 java.util.concurrent Map<Integer, String> concurrentMap = new ConcurrentHashMap<Integer, String>(); List<String> concurrentList = new CopyOnWriteArrayList<String>(); Queue<String> concurrentQueue = new ConcurrentLinkedQueue<String>();
  • 20. Курс по Java, 2016 Осторожно, многопоточность
  • 21. Курс по Java, 2016 Домашнее задание Довести до ума алгоритм расстановки отступов и переводов строк (можно со switch). Минимальная внешняя конфигурация: размер отступа на блок и символ отступа, символ перевода строки. 100% покрытие тестами всех Reader/Writer и Formatter (кроме main()). ДЗ присылать на указанные емэйлы до 22:00 вторника, 10 мая 2016. Если хотите получить персональный ответ, присылайте до 22:00 8-го мая 2016 года. [email protected] [email protected]