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

21
Курс по Java, 2016 Зависимости, итераторы, многопоточность Jar, Iterable, Iterator, Concurrency, Synchronization

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

Курс по 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-eachList<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

Частичная реализация интерфейса@Overridepublic void remove() { throw new UnsupportedOperationException( "MyIterator cannot remove");}

Курс по Java, 2016

Потоки

Курс по Java, 2016

java.lang.Runnableprivate 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.Threadpublic 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

Синхронизация@Overridepublic 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.concurrentMap<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 года.

[email protected] [email protected]