Содержание
- 2. 2011 © EPAM Systems, RD Dep. Содержание Понятие многопоточности Работа с потоками Синхронизация Concurrent
- 3. ПОНЯТИЕ МНОГОПОТОЧНОСТИ 2011 © EPAM Systems, RD Dep.
- 4. Понятие многопоточности Java обеспечивает встроенную поддержку для многопоточного программирования. Многопоточная программа содержит две и более частей,
- 5. Понятие многопоточности Многозадачные потоки требуют меньших накладных расходов по сравнению с многозадачными процессами. Процессы — это
- 6. Понятие многопоточности Многопоточность дает возможность писать очень эффективные программы, которые максимально используют CPU, потому что время
- 7. Понятие многопоточности Исполнительная система Java во многом зависит от потоков, и все библиотеки классов разработаны с
- 8. Понятие многопоточности Выгода от многопоточности Java заключается в том, что устраняется механизм "главный цикл/опрос". Один поток
- 9. Понятие многопоточности Потоки существуют в нескольких состояниях. Поток может быть в состоянии выполнения. Может находиться в
- 10. Понятие многопоточности 2011 © EPAM Systems, RD Dep.
- 11. РАБОТА С ПОТОКАМИ 2011 © EPAM Systems, RD Dep.
- 12. Работа с потоками Многопоточная система Java построена на классе Thread, его методах и связанном с ним
- 13. Работа с потоками. Example 01 2011 © EPAM Systems, RD Dep. package _java._se._07.startthread; public class Walk
- 14. Работа с потоками. Example 01 2011 © EPAM Systems, RD Dep. package _java._se._07.startthread; public class Talk
- 15. Работа с потоками. Example 01 2011 © EPAM Systems, RD Dep. package _java._se._07.startthread; public class DemoThead
- 16. Работа с потоками. Example 01 Результат: 2011 © EPAM Systems, RD Dep. Talking Walking Walking Talking
- 17. Работа с потоками Некоторые методы класса Thread 2011 © EPAM Systems, RD Dep.
- 18. Работа с потоками Когда Java-программа запускается, один поток начинает выполняться немедленно. Он обычно называется главным потоком.
- 19. Работа с потоками Хотя главный поток создается автоматически после запуска программы, он может управляться через Thread-объект.
- 20. Работа с потоками. Example 02 2011 © EPAM Systems, RD Dep. package _java._se._07.startthread; public class CurrentThreadDemo
- 21. Работа с потоками. Example 02 Результат: 2011 © EPAM Systems, RD Dep. Текущий поток: Thread[main,5,main] После
- 22. Работа с потоками Существуют два способа определения, закончился ли поток. Один из них позволяет вызывать метод
- 23. Работа с потоками В то время как isAlive() полезен только иногда, чаще для ожидания завершения потока
- 24. Работа с потоками Состояние потока возвращается методами int getState() и boolean isAlive() класса Thread 2011 ©
- 25. Работа с потоками. Example 03 2011 © EPAM Systems, RD Dep. package _java._se._07.startthread; public class DemoJoin
- 26. Работа с потоками. Example 03 2011 © EPAM Systems, RD Dep. class NewThread implements Runnable {
- 27. Работа с потоками. Example 03 Результат: 2011 © EPAM Systems, RD Dep. New thread: Thread[One,5,main] New
- 28. Работа с потоками. Example 04 2011 © EPAM Systems, RD Dep. package _java._se._07.startthread; public class GetStateDemo
- 29. Работа с потоками. Example 04 Результат: 2011 © EPAM Systems, RD Dep. Thread-0 RUNNABLE Thread-0 TERMINATED
- 30. Работа с потоками Вызов метода yield() для исполняемого потока должен приводить к приостановке потока на некоторый
- 31. Работа с потоками Приоритеты потоков Планировщик потоков использует их приоритеты для принятия решений о том, когда
- 32. Работа с потоками Высокоприоритетный поток может также упреждать низкоприоритетный (т. е. перехватывать у него управление процессором).
- 33. Работа с потоками Для безопасности потоки, которые совместно используют один и тот же приоритет, должны время
- 34. Работа с потоками Для установки приоритета потока используйте метод setPriority(), который является членом класса Thread. Вот
- 35. Работа с потоками Вы можете получить текущую установку приоритета, вызывая метод getPriority() класса Thread, чей формат
- 36. Работа с потоками. Example 05 2011 © EPAM Systems, RD Dep. package _java._se._07.startthread; public class PriorityDemo
- 37. Работа с потоками. Example 05 2011 © EPAM Systems, RD Dep. class Clicker implements Runnable {
- 38. Работа с потоками. Example 05 Результат: 2011 © EPAM Systems, RD Dep. Low-priority thread: 35443425 High-priority
- 39. Работа с потоками Группы потоков Для того, чтобы отдельный поток не мог начать останавливать и прерывать
- 40. Работа с потоками Группа потоков может содержать другие группы, что позволяет организовать все потоки и группы
- 41. Работа с потоками Все потоки, объединенные группой, имеют одинаковый приоритет. Чтобы определить, к какой группе относится
- 42. Работа с потоками. Example 06 2011 © EPAM Systems, RD Dep. package _java._se._07.startthread; class MyThread extends
- 43. Работа с потоками. Example 06 2011 © EPAM Systems, RD Dep. void suspendMe() { suspended =
- 44. Работа с потоками. Example 06 2011 © EPAM Systems, RD Dep. public class ThreadCroupDemo { public
- 45. Работа с потоками. Example 06 2011 © EPAM Systems, RD Dep. try { System.out.println("Waiting for threads
- 46. Работа с потоками. Example 06 Результат: 2011 © EPAM Systems, RD Dep. New thread: Thread[One,5,Group A]
- 47. Работа с потоками Потоки-демоны Потоки-демоны работают в фоновом режиме вместе с программой, но не являются неотъемлемой
- 48. Работа с потоками. Example 07 2011 © EPAM Systems, RD Dep. package _java._se._07.startthread; class T extends
- 49. Работа с потоками. Example 07 2011 © EPAM Systems, RD Dep. public class DaemonDemo { public
- 50. Работа с потоками. Example 07 Результат: 2011 © EPAM Systems, RD Dep. старт потока-демона старт обычного
- 51. СИНХРОНИЗАЦИЯ 2011 © EPAM Systems, RD Dep.
- 52. Синхронизация Правила, которые определяют, когда переключение контекста имеет место. Поток может добровольно отказаться от управления. Это
- 53. Синхронизация Поскольку многопоточность обеспечивает асинхронное поведение ваших программ, должен существовать способ добиться синхронности, когда в этом
- 54. Синхронизация Для этой цели Java эксплуатирует модель синхронизации процессов — монитор. Монитор — это механизм управления
- 55. Синхронизация Большинство многопоточных систем создает мониторы как объекты, которые ваша программа должна явно получить и использовать.
- 56. Синхронизация После того как вы разделите свою программу на отдельные потоки, нужно определить, как они будут
- 57. Синхронизация Когда несколько потоков нуждаются в доступе к разделяемому ресурсу, им необходим некоторый способ гарантии того,
- 58. Синхронизация Только один поток может иметь собственный монитор в заданный момент. Когда поток получает блокировку, говорят,
- 59. Синхронизация Синхронизация в Java проста потому, что каждый объект имеет свой собственный неявный связанный с ним
- 60. Синхронизация. Example 08 2011 © EPAM Systems, RD Dep. package _java._se._07.synchro; public class SynchroMethodDemo { private
- 61. Синхронизация. Example 08 2011 © EPAM Systems, RD Dep. public static void main(String[] args) { final
- 62. Синхронизация. Example 08 Результат: 2011 © EPAM Systems, RD Dep. threadA: objID=obj1 - entering doStuff() threadA:
- 63. Синхронизация Хотя определения синхронизированных методов внутри классов — это простые и эффективные средства достижения синхронизации, они
- 64. Синхронизация Вот общая форма оператора synchronized: synchronized(object) { // операторы для синхронизации } где object —
- 65. Синхронизация. Example 09 2011 © EPAM Systems, RD Dep. package _java._se._07.synchro; public class SynchroBlockDemo { public
- 66. Синхронизация. Example 09 2011 © EPAM Systems, RD Dep. public static void main(String[] args) { Runnable
- 67. Синхронизация. Example 09 Результат: 2011 © EPAM Systems, RD Dep. entering staticA() leaving staticA() in staticB()
- 68. Синхронизация Вы можете достичь более тонкого уровня управления через связь между процессами. Многопоточность заменяет программирование цикла
- 69. Синхронизация Например, рассмотрим классическую проблему организации очереди, где один поток производит некоторые данные, а другой —
- 70. Синхронизация wait () сообщает вызывающему потоку, что нужно уступить монитор и переходить в режим ожидания ("спячки"),
- 71. Синхронизация. Example 10 2011 © EPAM Systems, RD Dep. package _java._se._07.synchro; class MyResource { boolean ready
- 72. Синхронизация. Example 10 2011 © EPAM Systems, RD Dep. class MyThread implements Runnable { MyResource myResource;
- 73. Синхронизация. Example 10 Результат: 2011 © EPAM Systems, RD Dep. MyThread is entering waitFor(). ..........MyThread resuming
- 74. Синхронизация Специальный тип ошибки, которую вам нужно избегать и которая специально относится к многозадачности, это —
- 75. Синхронизация Взаимоблокировка — трудная ошибка для отладки по двум причинам: Вообще говоря, она происходит очень редко,
- 76. Синхронизация Приостановка выполнения потока иногда полезна. Например, отдельные потоки могут использоваться, чтобы отображать время дня. Если
- 77. Синхронизация До Java 2 для приостановки и перезапуска выполнения потока программа использовала методы suspend () и
- 78. Синхронизация В Java 2 запрещено использовать методы suspend(), resume() или stop() для управления потоком. Поток должен
- 79. CONCURRENT 2011 © EPAM Systems, RD Dep.
- 80. Сoncurrent В Java версии 1.5 был добавлен новый пакет, содержащий много полезных возможностей, касающихся синхронизации и
- 81. Сoncurrent Ограниченно потокобезопасные (thread safe) коллекции и вспомогательные классы управления потоками сосредоточены в пакете java.util.concurrent. Среди
- 82. Сoncurrent параллельные аналоги существующих синхронизированых классов-коллекций ConcurrentHashMap (аналог Hashtable) и CopyOnWriteArrayList (реализация List, оптимизированная для случая,
- 83. Сoncurrent высокопроизводительный класс Lock, поддерживающий ограниченные ожидания снятия блокировки, прерываемые попытки блокировки, очереди блокировки и установку
- 84. Сoncurrent классы атомарных переменных (AtomicInteger, AtomicLong, AtomicReference), а также их высокопроизводительные аналоги SyncronizedInt и др.; обработка
- 85. Сoncurrent Executors Пакет java.util.concurrent содержит три Executor-интерфейса: Executor ExecutorService ScheduledExecutorService Также библиотека java.util.concurrent содержит специальный класс,
- 86. Сoncurrent. Example 11 2011 © EPAM Systems, RD Dep. package executor; public class MyThread implements Runnable
- 87. Сoncurrent Сначала создается объект класса ExecutorService. После чего вызывается метод execute, которому в качестве параметра необходимо
- 88. Сoncurrent В примере объекту «ex» присваивается специальная реализация Executors.newCachedThreadPool(). Данная реализация применяется в тех случаях, когда
- 89. Сoncurrent ExecutorService Данный интерфейс является расширением интерфейса Executor и добавляет следующие полезные возможности: Возможность остановить выполняемый
- 90. Сoncurrent Возврат значений из задач. Интерфейс Callable Очень часто нам необходимо, чтобы поток после выполнения своей
- 91. Сoncurrent. Example 12 2011 © EPAM Systems, RD Dep. package executorservice; import java.util.concurrent.Callable; public class MyThread
- 92. Сoncurrent Теперь рассмотрим способ получения полученного значения, используя исполнители. Для передачи объекта, созданного нами класса исполнителя,
- 93. Сoncurrent. Example 13 Результат: 2011 © EPAM Systems, RD Dep. package executorservice; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService;
- 94. Сoncurrent Управление потоками. Ожидание Существует несколько методов управления потоками. Давайте рассмотрим метод переводящий поток в состояние
- 95. Сoncurrent. Example 14 2011 © EPAM Systems, RD Dep. package timeunit; import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; public
- 96. Сoncurrent Механизм управления мьютексами Lock Lock является явным механизмом управления мьютексами. Он находиться в библиотеке java.util.concurrent.
- 97. Сoncurrent. Example 15 2011 © EPAM Systems, RD Dep. package _java._se._07._concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public
- 98. Сoncurrent Атомарные операции. Volatile Атомарные операции- это операции, которые не могут быть прерваны планировщиком потоков. Чтение
- 99. Сoncurrent. Example 16 Атомарные классы Попробуем разрешить конфликт с помощью атомарных классов: AtomicInteger, Atomic Long ,AtomicReference
- 100. Сoncurrent. Example 17 Синхронизованные коллекции 2011 © EPAM Systems, RD Dep. package _java._se._07._concurrent; import java.util.Random; import
- 101. Сoncurrent. Example 17 2011 © EPAM Systems, RD Dep. class Manager implements Runnable { private QueueTask
- 102. Сoncurrent. Example 17 2011 © EPAM Systems, RD Dep. class QueueTask{ private PriorityBlockingQueue queue = new
- 103. Сoncurrent. Example 17 2011 © EPAM Systems, RD Dep. public class PriorityBlockingQueueDemo { public static void
- 104. Сoncurrent. Example 17 Результат: 2011 © EPAM Systems, RD Dep. Jonh get task number 2 Jonh
- 105. Сoncurrent. Example 17 А вот возможный результат использования в этом примере PriorityQueue 2011 © EPAM Systems,
- 107. Скачать презентацию