Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Перечислите состояния потоков.

Читайте также:
  1. V Анализ состояния общественно-политической ситуации в организации
  2. Агрегатные состояния
  3. Анализ современного состояния ветроэнергетики в мире
  4. Анализ состояния общественного мнения
  5. Анализ состояния организации бытового обслуживания населения
  6. Анализ финансового состояния предприятия
  7. Анализ финансового состояния предприятия.
  8. Безэмоциональные состояния
  9. В) Отношение к болезни в хронических состояниях
  10. Вегетативные реакции на эмоциональные состояния

Состояния потоков:

- Born (Порождён): Вновь созданный поток находится в состоянии born (порождён).

- Ready (Готов): После создания потока он переходит в состояние ready (готов), ожидая вызова метода start ().

- Running (Работает): Поток входит в рабочее состояние, когда начинается его выполнение

- Sleeping (Пауза): Выполнение потока может быть временно приостановлено с помощью метода sleep (). Поток опять переходит в состояние готовности после окончания интервала времени паузы.

- Waiting (Ожидание): Поток находится в состоянии ожидания, если был вызван метод wait (). Используется при параллельной работе двух и более потоков.

Blocked (Заблокирован): Поток входит в состояние блокировки, когда ожидает наступления некоторого события, например, выполнение операций ввода/вывода.

Dead (Уничтожен): Для потока состояние dead наступает после завершения работы метода run () или после вызова метода stop () в потоке.

 

Приоритеты потоков в Java являются константами, определёнными в классе Thread.

NORM_PRIORITY – значение 5

MAX_PRIORITY – значение 10

MIN_PRIORITY – значение 1

Приоритетом по умолчанию является NORM_PRIORITY

Два метода используются для изменения приоритета:

final void setPriority(int newp): изменяет текущий приоритет потока.

final int getPriority(): возвращает приоритет потока.

 

35. Что такое Daemon-потоки?

Два типа потоков в Java:

- Пользовательские потоки: создаются пользователем

- Daemon-потоки: потоки, которые работают в фоновом режиме, обеспечивая сервис для других потоков, например – поток «сборки мусора» (garbage collector)

 

При выходе из пользовательского потока виртуальная машина JVM выполняет проверку, чтобы определить, не выполняется ли какой-либо другой поток.

Если выполняющийся поток обнаружен, то начинается планирование выполнения следующего потока.

Если выполняются только daemon-потоки, то происходит выход.

 

Мы можем сделать поток Daemon-потоком, если нет необходимости в том, чтобы основная программа ожидала окончания работы потока.

Класс Thread имеет два метода для работы с Daemon-потоками:

- public final void setDaemon(boolean value): выполняет установку потока, как daemon-потока

- public final boolean isDaemon(): проверяет, является ли заданный поток daemon-потоком

 

36. Для чего нужна синхронизация? Как она обеспечивается в Java?

- Иногда два или более потоков могут одновременно попытаться получить доступ к одному и тому же ресурсу. Например, один поток пытается прочитать данные из файла, в то время как другой поток пытается изменить данные в том же самом файле

- В этом случае данные могут стать некорректными.

- Для гарантии того, что общедоступный ресурс используется только одним потоком в любой момент времени, мы используем синхронизацию – synchronization.

- Синхронизация основана на концепции монитора (monitor).

- Монитор (monitor) – это объект, который используется, как взаимно исключающая блокировка (mutually exclusive lock).

- Только один поток может войти в монитор.

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

- Для входа потока в монитор объекта программист обязательно должен вызвать метод, созданный с использованием ключевого слова synchronized.

- Владелец этого метода должен выйти из метода, чтобы передать управление кому-либо.

 

Состояние состязания

- Если пропустить ключевое слово synchronized в предыдущем примере, то все потоки смогут одновременно вызывать один и тот же метод, в одном и том же объекте.

- Эта ситуация известна под названием race condition (состояние состязания).

- Возникновение состояния состязания в программе возможно в следующих случаях:

Два или несколько потоков совместно используют данные

Они одновременно считывают и записывают эти данные

 

Синхронизированный блок

- Не всегда возможно достижение синхронизации путём создания synchronized методов внутри классов.

- Мы можем разместить все обращения к методам, определённых данным классом, внутри синхронизизированного (synchronized) блока.

- Синхронизизированный (synchronized) блок гарантирует, что метод может быть вызван только после того, как соответствующий поток успешно вошёл в монитор объекта.

Ключевое слово synchronized включают в метод run().

 

Использование механизма ‘wait-notify’

- Java предоставляет хорошо проработанный механизм обмена информацией между процессами, использующий методы wait (), notify () и notifyAll ().

- Эти методы реализованы, как final -методы в классе Object.

- wait (), notify () и notifyAll () могут быть вызваны только из синхронизированного (synchronized) метода.

- Метод wait () приказывает вызывающему потоку выйти из монитора и перейти в состояние sleep до тех пор, пока какой-либо другой поток не войдёт в монитор и не вызовет метод notify().

- Метод notify ()даёт команду активизации (wake up) предыдущему потоку, который ранее вызвал метод wait ().

- Метод notifyAll () даёт команду активизации (wake up) или оповещает все потоки, которые ранее вызвали метод wait ().

- После того, как все потоки выходят из состояния паузы (sleep mode), поток, имеющий наивысший приоритет, начинает выполняться первым.

 

wait ()

При использовании метода wait() необходимо помнить о следующем:

- Вызывающий поток освобождает процессор (CPU).

- Вызывающий поток отменяет блокировку.

- Вызывающий поток переходит в пул ожидающих потоков (waiting pool) монитора.

 

notify ()

При использовании метода notify() необходимо помнить о следующем:

- Один поток извлекается из пула ожидающих потоков (waiting pool) монитора и переходит в состояние готовности (ready state).

- Этот поток, который был оповещён, обязательно должен восстановить блокировку монитора, прежде чем он сможет продолжить выполнение, поскольку, находясь в состоянии паузы (sleep state), он утратил управление монитором.

 

37. Что такое сборка мусора, как работает этот механизм?

Сборка мусора – Garbage collection:

- Процесс, при котором ранее выделенная объектам память, которая больше не используется, может быть освобождена или восстановлена.

- Java автоматически освобождает память, которая больше не требуется.

- Таким образом, программистам вообще не надо беспокоиться об освобождении использованной памяти.

- Объект может быть подвергнут процедуре «сборки мусора» (garbage collection), если отсутствуют какие бы то ни было ссылки на него, или если ему было присвоено null-значение.

- Сборщик мусора (Garbage collector) работает, как отдельный независимый поток с низким приоритетом.

- Сборщик мусора может быть вызван через обращение к методу gc() данного экземпляра.

- При этом не гарантируется, что сборщик мусора начнёт работу сразу после вызова.

 

Использование метода finalize

- Java предоставляет способ, похожий на деструкторы языка C++, который можно использовать для полного освобождения ресурсов перед тем, как управление будет возвращено операционной системе.

- Метод finalize (), если он присутствует, будет выполнен до начала процедуры сборки мусора только один раз для конкретного объекта. Синтаксис этого метода:




Дата добавления: 2015-09-11; просмотров: 24 | Поможем написать вашу работу | Нарушение авторских прав

Апплеты | Создание HTML-страницы для вывода апплета | Class First | Какими бывают комментарии в Java. | Интерфейс | Виды модификаторов доступа в Java. | Package имя_пакета; | FlowLayout, BoxLayout, BorderLayout, CardLayout, GridLayout, GridBagLayout, SpringLayout, null | Класс Runtime | Класс TreeSet |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.009 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав