Запуск потоков
Монитор
Пулы потоков
Одно задачный пул
Много задачный пул
Потоки Java
Потоки Java
Потоки Java
Потоки Java
Потоки Java
Потоки Java
Потоки Java
Потоки Java
Потоки Java, класс Thread
Потоки Java, класс Thread
Потоки Java
Потоки Java
Потоки Java
Потоки Java
Потоки Java
667.50K
Категория: ПрограммированиеПрограммирование

15_Potoki_Java_2

1. Запуск потоков

1. Синхронизация потоков
2. Интерфейсы Callable и
Future
3. Пул потоков

2. Монитор

Синхронизация – предоставление потоку монопольного
доступа к ресурсу.
Блок synchronized – монитор синхронизации.
Если поток выполняет действия над ресурсом в мониторе,
то он монопольно разделяет ресурс и виртуальную
машину, пока не выйдет из монитора.
synchronized (Объкт_с_ресурсом){
//Вызов операций объекта
//для работы с ресурсом
Объект_с_ресурсом.операция();
}
2

3. Пулы потоков

Интерфейс Callable позволяет создавать задачи для
параллельного выполнения.
Задача возвращает результат.
Интерфейс Fututre служит для получения результата
от задачи созданной с помощью интерфейса Callable
Задачи образуют пул.
Пулы бывают однозадачные и многозадачные
Для создания программ с пулами потоков
нужно импортировать классы из пакета
параллельной обработки потоков:
import java.util.concurrent.*;
3

4. Одно задачный пул

//Создать пул
ExecutorService exec = Executors.newSingleThreadExecutor();
//Создать задачу
Callable<Тип>имя_задачи = () -> {
//Код задачи
return результат;
};
//Выполнить задачу в пуле
Future <Тип> ft = exec.submit(имя_задачи);
try{
тип ответ = ft.get();
Тип – тип результата,
}
примеры:
catch(Exception e){
Dоuble
//Обработка ошибки
Integer
}
String
//Закрыть пул
exec.shutdown();
4

5. Много задачный пул

//Создать пул
ExecutorService exec = Executors.newFixedThreadPool(N);
//Задачи
Callable<Тип>task1 = () -> {
return ответ;};
Callable<Тип>task2 = () -> {
N – число задач
return ответ;};

//Запуск задач и получение результата
Future <Тип> ft1 = exec.submit(задача1);
Future <Тип> ft2 = exec.submit(задача2);

try{
тип ответ1 = ft1.get();
тип ответ2 = ft2.get();

}
catch(Exception e){
//Обработка ошибки }
5

6. Потоки Java

Контрольные
задания
6

7. Потоки Java

Задание №1. Дан ресурс в котором хранятся строки
фрагмента стихотворения
А.С. Пушкина посвящённого Санкт. Питербургу.
Люблю тебя, Петра творенье
Люблю твой строгий, стройный вид,
Невы державное теченье
Береговой её гранит
Твоих оград узор чугунный
Твоих задумчивых ночей
Прозрачный сумрак, блеск безлунный
Когда я в комнате моей
Пишу, читаю без лампады
Напишите программу которая
И ясны спящие громады
соответствует
Пустынных улиц, и светла
UML схеме классов
Адмиралтейская игла
И, не пуская тьму ночную
На золотые небеса
Одна заря сменить другую
7
Спешит, дав ночи полчаса.

8. Потоки Java

См. Далее
8

9. Потоки Java

Поток
Название
Задержка в
потоке, сек
objTOne
Первый поток
1
objTWo
Второй поток
0,3
objTThree
Третий поток
0,7
См. Далее
9

10. Потоки Java

Вывод программы
См. Далее
10

11. Потоки Java

11

12. Потоки Java

Задание №2. Напишите программу на основе
программы №1, для монопольного
использования ресурса – строк
стихотворения потоками в мониторе - блоке
синхронизации.
Потоки должны «читать» стихотворение в
порядке очередности.
12

13. Потоки Java

Вывод программы,
очередность
чтения потоками
стихотворения
может отличаться
См. Далее
13

14. Потоки Java, класс Thread

См. Далее
14

15. Потоки Java, класс Thread

См. Далее
15

16. Потоки Java

Задание №3. Напишите программу в соответствии
с UML диаграммами для вычисления объёма.
См. Далее
16

17. Потоки Java

Пауза, одна секунда
Ответ
17

18. Потоки Java

Задание №4. Дан блок данных, натуральные числа и
алгоритмы для вычисления их суммы и произведения.
Напишите программу в соответствии с UML
диаграммой состояний, которая использует эти
алгоритмы.
numbers = [100, 5, 6, 300,50,25,90,10,50]
Сумма
Произведение
См. Далее
18

19. Потоки Java

См. Далее
19

20. Потоки Java

Результат
20
English     Русский Правила