Урок 20

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

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

Многозадачность бывает двух типов:

  • на основе процессов 
  • на основе потоков

1.1. Многозадачность на основе процессов

Многозадачность на основе процессов - это средство, которое позволяет одновременно выполнять две или несколько программ на компьютере. Процесс, по существу, является выполняющейся программой. Процессы являются крупными задачами, каждой из которых требуется свое адресное пространство. Связь между процессами ограничена и обходится дорого. Переключение контекста с одного процесса на другой также обходится дорого. Процесс может иметь несколько потоков. Количество потоков может меняться во время выполнения процесса.

1.2. Многозадачность на основе потоков

Многозадачность на основе потоков - означает, что одна программа может выполнять две или несколько задач одновременно. Потоки исполнения более просты чем процессы. Они совместно используют одно и то же адресное пространство и один и тот же крупный процесс. Связь между потоками исполнения обходится недорого, как, впрочем , и переключение контекста с одного потока исполнения на другой.

2. Многопоточноcть в Java

В Java многозадачность реализована на основе потоков. Многопоточное программирование применяют для сведения к минимуму времени простоя системы, поскольку сразу несколько задач могут выполняться одновременно. В Java поток определяет два разных понятия – “поток выполнения” и “объект класса java.lang.Thread”.

При запуске Java-программы начинает выполняться главный поток (main). Особенность главного потока состоит в том, что в нем порождаются все дочерние потоки. Главный поток отождествляется с программой. Программа начинается с выполнения главного потока и должна завершаться с завершением главного потока. В отличие от дочерних потоков главный поток создается автоматически.

Потоки совместно используют:

  • переменные класса и статические переменные;
  • динамически распределяемую память (кучу);
  • системные ресурсы, выделенные процессу.

Каждый поток имеет свои собственные локальные переменные (т.е. свой собственный стек).

3. Способы создания и инициализации потока

  1. Расширяем класс java.lang.Thread ИЛИ реализуем интерфейс java.lang.Runnable (более предпочтительный вариант).
  2. Переопределяем метод run().
  3. Запускаем поток с помощью метода start().



1 comments
  1. hmma0723
    Jun 14, 2017
    I think if @OrderBy is specified without fields or properties like this; @OrderBy private List students; The students are ordered by their primary key.
Leave your comment: