Содержание
- 2. Базовые свойства многопоточности Процесс -это объект, который создается операционной системой, когда пользователь запускает приложение. Процессу выделяется
- 3. Цикл, который загрузит процессор public class Thead1 { long i = 0; public void run(){ System.out.println("Запускаем
- 4. Создание потока Для создания потока в Java служит класс Thread Существует 2 варианта создания потока: путем
- 5. Создание потока – наследника Thread Простейшим способом создания потока является создание класса, производного от Thread, с
- 6. Пример создания потока Каждые полсекунды поток выводит сообщение на экран: public class NewThread extends Thread {
- 7. Создание потока путем реализации интерфейса Runnable Этот способ применяется, когда наследование класса от Thread невозможно (например,
- 8. Пример создания потока public class MyThread implements Runnable { public void run() { // тело метода
- 9. Диспетчеризация потоков Параллельная работа потоков на одном процессоре обеспечивается операционной системой Для того, чтобы обеспечить правильную
- 10. Приоритеты потоков Приоритеты потоков определяют порядок передачи управления между ними Правила передачи управления следующие: если поток
- 11. Демонстрация приоритетов потоков. class Clicker implements Runnable { long click = 0; Thread t; private volatile
- 12. class Main { public static void main(String args[]) { Thread.currentThread().setPriority(Thread.MAX_PRIORITY); Clicker hi = new Clicker(Thread.NORM_PRIORITY +
- 13. Текущий поток Когда запускается любое приложение, то начинает выполняться поток, называемый главным потоком (main). От него
- 14. Имена потоков Потоку можно присвоить имя либо с помощью аргумента конструктора Thread(String name), либо методом setName(String).
- 15. Потоки-демоны Поток-демон, как правило, предоставляет некоторые общие услуги и работает в фоновом режиме, пока работает программа
- 16. Проблема множественного доступа Когда несколько потоков разделяют один ресурс, бывает необходимо синхронизировать их работу так, чтобы
- 17. Средства синхронизации потоков в Java Метод. При вызове такого метода блокируется объект, для которого вызван данный
- 18. Пример синхронизации участков кода public class MyObject{ // В данном классе объявлены 2 синхронизированных метода f()
- 19. Пример синхронизации участков кода // Поток, в котором вызывается метод f() public class Thread1 extends Thread{
- 20. Пример синхронизации участков кода В данном потоке объявлена критическая секция, связанная с объектом MyObject public class
- 21. Пример синхронизации участков кода public static void main(String[] args) { MyObject myObj = new MyObject("MyObject1"); //
- 22. Пример синхронизации участков кода Результаты запуска программы f() started for object MyObject1 f() started for object
- 23. Синхронизация статических участков В качестве синхронизирующего объекта может выступать сам класс. В этом случае последовательно выполняются
- 24. Пример синхронизации статических участков public static void main(String[] args) { ThreadS ts = new ThreadS(); ThreadS2
- 25. Методы wait(), notify(), notifyAll() Эти методы применяются для обеспечения взаимодействия между потоками при работе с объектом
- 26. Применение wait () и notifyAll() Типичный код для перевода потока в режим ожидания: synchronized void do()
- 27. Взаимодействие потоков на примере Задача. Есть производитель и потребитель данных - целых чисел. Имеется склад данных,
- 28. Взаимодействие потоков на примере class Consumer implements Runnable { Store store; // Ссылка на объект-склад //
- 29. Взаимодействие потоков на примере public class Store { private int n; // Хранимое на складе число
- 30. Взаимодействие потоков на примере В методе main() главный поток запускает два дочерних и тут же прекращается:
- 31. Взаимная блокировка потоков (deadlock) В простейшем случае взаимная блокировка возникает, когда два потока используют два синхронизированных
- 32. Пример взаимной блокировки потоков public class DeadLocker extends Thread{ Object a, b; public DeadLocker (Object a,
- 33. Пример взаимной блокировки потоков Для демонстрации взаимной влокировки используем следующий код: // Объекты a и b,
- 34. Завершение потока Поток продолжает действовать (метод потока isAlive() возвращает true), пока не произойдет одно из 3-х
- 35. Пример корректного завершения потока Корректного прекращения работы потока можно добиться, поместив в цикл метода run() проверку
- 36. Прерывание потоков Механизм прерывания в классе Thread поддерживается методами: interrupt() – устанавливает состояние потока в значение
- 37. Пример завершения потока с interrupt() public class MyThread extends Thread{ public void run() { while (!interrupted())
- 38. Ожидание завершения потока Если главный поток решил дожидаться завершения работы дочернего потока, он может сделать это,
- 40. Скачать презентацию