Скачать презентацию Java Threads Многозадачность Многопоточнсть Interface Скачать презентацию Java Threads Многозадачность Многопоточнсть Interface

Season 2 - Lecture4Threads.pptx

  • Количество слайдов: 20

Java Threads Java Threads

Многозадачность Многозадачность

Многопоточнсть Многопоточнсть

Interface Runnable Method run Назначение ? Class Thread Method Назначение get. Name get. Priority Interface Runnable Method run Назначение ? Class Thread Method Назначение get. Name get. Priority is. Alive ? ? ? join sleep start ? ? ?

Main Thread (главный поток) Создается автоматически при старте программы public static void main(String args[]) Main Thread (главный поток) Создается автоматически при старте программы public static void main(String args[]) { Thread t = Thread. current. Thread(); . . . }

Создание потока Два способа: • Реализовать интерфейс Runnable - имплементировать метод “run()” • Расширить Создание потока Два способа: • Реализовать интерфейс Runnable - имплементировать метод “run()” • Расширить класс Thread - переопределить метод “run()” Какой из способов лучше?

implements Runnable class My. Runnable implements Runnable { public void run() {. . . implements Runnable class My. Runnable implements Runnable { public void run() {. . . } } My. Runnable runnable = new My. Runnable(); new Thread(runnable). start();

extends Thread class My. Thread extends Thread { public void run() {. . . extends Thread class My. Thread extends Thread { public void run() {. . . } } My. Thread thread = new My. Thread(); thread. start();

Anonymous thread Thread t 1 = new Thread() { public void run() {. . Anonymous thread Thread t 1 = new Thread() { public void run() {. . . } }; t 1. start(); Thread t 2 = new Thread(new Runnable() { public void run() {. . . } }); t 2. start();

Daemon Thread Обслуживающий поток My. Thread thread = new My. Thread(); thread. set. Daemon(true); Daemon Thread Обслуживающий поток My. Thread thread = new My. Thread(); thread. set. Daemon(true); . . .

Пример с поездами My. Thread train 1 = new My. Thread(); My. Thread train Пример с поездами My. Thread train 1 = new My. Thread(); My. Thread train 2 = new My. Thread(); train 1. start(); train 2. start(); • Запись в один файл • Изменение объекта, переменной • etc.

Method sleep while (true) {. . . try { // Thread. sleep(10000); Time. Unit. Method sleep while (true) {. . . try { // Thread. sleep(10000); Time. Unit. SECONDS. sleep(10); } catch (Interrupted. Exception e) {. . . } }

Методы is. Alive & join is. Alive – проверка, выполняется ли поток while (intersection) Методы is. Alive & join is. Alive – проверка, выполняется ли поток while (intersection) { // перекресток if (!train 1. is. Alive()) train 2. start(); } join – ждем пока поток завершится try { train 1. join(); } catch (Interrupted. Exception e) {. . . } // можно ехать

Синхронизация Thread 1 Thread 2 Monitor Resource Thread 3 Синхронизация Thread 1 Thread 2 Monitor Resource Thread 3

Механизмы синхронизации Синхронизированный метод public synchronized void do. Something() {. . . } Оператор Механизмы синхронизации Синхронизированный метод public synchronized void do. Something() {. . . } Оператор syncronized public void do. Something() { synchronized (mutex) {. . . } }

Межпотоковые коммуникации Методы wait(), notify. All() synchronized void do. Something() throws Interrupted. Exception { Межпотоковые коммуникации Методы wait(), notify. All() synchronized void do. Something() throws Interrupted. Exception { if(need. To. Wait) { wait(); } call. Externall. System(); notify(); }

Жизненный цикл new ожидание блокировки / блокировка получена начал выполнение runnable закончил работу blocked Жизненный цикл new ожидание блокировки / блокировка получена начал выполнение runnable закончил работу blocked terminated wait / notify, notify. All waiting wait, join, sleep / время истекло timed waiting

Deadlock (взаимная блокировка) Thread 1 Thread 2 synchronized Deadlock (взаимная блокировка) Thread 1 Thread 2 synchronized

Пример deadlock class A { synchronized void method. A(B b) { b. do. Something(); Пример deadlock class A { synchronized void method. A(B b) { b. do. Something(); } synchronized void do. Something() {. . . } } class B { synchronized void method. B(A a) { a. do. Something(); } synchronized void do. Something() {. . . } }

Home Work Нужно написать консольную программу, которая ищет файлы по какому-то паттерну. Программа должна Home Work Нужно написать консольную программу, которая ищет файлы по какому-то паттерну. Программа должна быть многопоточная, но нельзя использовать пакет util. concurrent. Требуется добиться максимальной производительности. Паттерны могут быть *. doc, *. java и т. д. Интерфейс консольный: Ввод паттерна и директории, Вывод имен файлов и времени выполнения.