Java, осень 2014: Многопоточность в Java: средства стандартной библиотеки
Курс Java-2016. Занятие 08. Итераторы, многопоточность
Transcript of Курс Java-2016. Занятие 08. Итераторы, многопоточность
Курс по Java, 2016
Зависимости, итераторы, многопоточность
Jar, Iterable, Iterator, Concurrency, Synchronization
Курс по 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
На самом деле это итератор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
Частичная реализация интерфейса@Overridepublic void remove() { throw new UnsupportedOperationException( "MyIterator cannot remove");}
Курс по 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
Синхронизация@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
Домашнее заданиеДовести до ума алгоритм расстановки отступов и переводов строк (можно со switch).
Минимальная внешняя конфигурация: размер отступа на блок и символ отступа, символ перевода строки.
100% покрытие тестами всех Reader/Writer и Formatter (кроме main()).
ДЗ присылать на указанные емэйлы до 22:00 вторника, 10 мая 2016. Если хотите получить персональный ответ, присылайте до 22:00 8-го мая 2016 года.