
Лекции, Кокарева, TR_TKC / 6. Параллельное выполнение
.docx
Многопоточность
в Java
Лекция
5
по дисциплине: Технология разработки
ТК сервисов
СибГУТИ
7,
2015
Автор:
Е.В. Кокорева
1. Многозадачность
Многозадачность позволяет выполнять на компьютере несколько операций одновременно.
Различают:
- многозадачность, основанная на процессах (Process) – даёт возможность одновременно запускать несколько программ на уровне крупных структурных единиц;
- многозадачность, основанная на потоках (Thread) – дат возможность одновременно запускать части одной и той же программы на уровне мелких структурных единиц.
Свойства потоков:
- потоки разделяют одно и то же адресное пространство, могут разделять также код и данные;
- переключение между потоками проще, чем между процессами;
- стоимость взаимодействия потоков относительно низка;
- внутри программы может выполняться много потоков.
Многопоточное программирование заключается в следующем:
- создание потоков и представление кода, который будет выполняться потоком;
- доступ к общим данным и коду через синхронизацию;
- переход между состояниями потока.
2. Создание потока
Поток в Java представлен объектом класса Thread.
Реализация потока достигается одним из двух способов:
- реализация интерфейса java.lang.Runnable;
- расширение класса java.lang.Thread.
Интерфейс Runnable имеет один прототип метода run().
Код в методе run() определяет независимый путь выполнения, вход и выход из потока. Поток завершается, когда метод run() заканчивает работу.
3. Методы класса Thread
Метод |
Описание |
final String getName() |
Получает имя потока. |
final int getPriority() |
Получает приоритет потока. |
final boolean isAliveO |
Определяет, выполняется ли поток. |
final void join() |
Ожидает завершения потока. |
void run() |
Определяет точку входа в поток. |
static void sleep(long msec) |
Приостанавливает исполнение потока на указанное число миллисекунд. |
void start() |
Запускает поток, вызывая его метод run(). |
4. Пример работы с потоком на основе класса Thread
import java.io.*;
import java.util.*;
import java.lang.*;
public class Eigth extends Thread{ // Класс-поток
static int count;
String name;
public Eigth(String name) {// Конструктор
super(name);
count = 1;
start();
}
public void run() { //
System.out.println("Tread " + this.getName() + " running " + count);
try {
while (count < 5) {
System.out.println("Tread " + this.getName() + " running " + count++);
sleep(100);
}
} catch (Exception e) {
} finally {
System.out.println("Exit from Thread " + this.getName());
}
}
public static void main(String[] args) {
Eigth first = new Eigth("First");
Eigth second = new Eigth("Second");
Eigth third = new Eigth("Third");
}
}
Результат работы:
Tread Third running 1
Tread Third running 1
Tread Second running 1
Tread Second running 2
Tread First running 1
Tread First running 3
Tread First running 4
Exit from Thread Third
Tread Second running 4
Exit from Thread Second
Exit from Thread First
Спасибо
за внимание!