Вопрос: Какие могут быть состояния потока? — КиберПедия 

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Вопрос: Какие могут быть состояния потока?

2022-10-10 41
Вопрос: Какие могут быть состояния потока? 0.00 из 5.00 0 оценок
Заказать работу

Ответ: Тот самый «конечный автомат»:

NEW - толькосоздали, ноневызвалиstart.

После вызова start (если он не завершил свою работу)у потока может быть:

RUNNABLE – просто нормально исполняется

BLOCKED –это в любом варианте, которое связано с синхронизацией.

WAITING – это ваш joinи sleep

TIMED_ WAITING – это когда joinпишется с числом.

Вот из этих состояний ожидания его выбивает interrupt. Поэтому если от какого-то потока долго нет ответа, то вы можете попросить из getStateи вам скажут: BLOCKED. Как из BLOCKED можно выйти? Только через interrupt. Но тогда он из ожидания вылетает и пошло дальше течь по файлу. Но после того, как run завершился, поток попадает в состояние terminated. Вот эти 6 состояний, которые проходят этот объект.

Вопрос: А в извне чтобы вы не мучились вызывайте isAlive. Когда isAlive какое возвращает true?

Ответ: Все что не NEW и не TERMINATED. isAliveвозвращает true, если он работает. Если он спит, то это тоже работа.

 

Вопрос: 060616-103844 29:30 и чуть-чуть назад перекрутить

Управлять внутренним автоматом вы не можете, это происходит внутреннее событие. Например, кто-то вызывает start, и если это не ваш поток, то кто-то его создал и почему-то отложил вызов start. Вы спрашиваете у потока «Ты как?», а он «New», «Ты как?», а он «New». Это означает, что кто-то не хочет вызывать start. Почему? Незнаю. Потокунедалиstart. Если у возможность, ведь вы же вызываете isAliveили getState на каком-то объекте, но вы можете взять и сами вызвать start.

Локальная память потока

Если взять любую ОС, то как поток работает. Что означает, поток получает процессорное время? Он должен выполняться, а потом когда это процессорное время у него закончится, то выполнение переключается на другой поток. А когда ему снова дадут процессорное время он должен сохранять полностью всех регистров процессора, т.е. все что было когда его собирались остановить. Где поток будет хранить всю информацию о своей работе? Ответ: в себе. Есть понятие – локальная память потока (ThreadLocalStorage).

Без этого (локальная память потока) технически было бы невозможно. Поток работает, заканчивает работу, сохраняет состояние, ему говорят на тебе процессорное время, он берет свое состояние и в процессор записывает свои регистры, какие они были. И потом это все дальше пошло. Локальная память потока – это важная часть инфраструктуры, потому что у каждого потока как объекта, который создается в ОС есть своя локальная память и только он может к ней обращаться. Это важно для надежности, чтобы у нас не произошло какого-нибудь бардака, поток непонятно откуда взял или непонятно кто его данные испортил и он вместо того чтобы начать с того же места просто рухнул.

Вопрос: А где она выделяется?

Ответ: Где-то в памяти. Вот если бы вы на Си программировали под Windows, то мы бы смогли бы это уточнить. Вот создается объект потока, как сущность, как объект ядра ОС, где-то есть связанная с ним некая память.

И тут возникает вопрос:А вдруг мы тоже хотим свои данные сохранять куда-то в локальную память потока? Вобылобыинтересно. Ит.к. мы не знаем где-то, да и знать не хотим, а на разных ОС это может быть по-разному реализовано, то нам всегда предоставляют в библиотеке класс ThreadLocal. И вот именно этот класс (его реализация под каждой платформой знает) куда и как эти локальные данные нужно класть и откуда их потом брать. Понятно, что он реализован как Generic, потому что вы же хотите сохранить не ThreadLocal, а Doubleили еще какой-то тип данных, а это просто контейнер или упаковка, которая говорит «А, вот человек Doubleхочет положить, ну да и мы знаем куда в локальный поток», «О! он хочет его прочитать!» и они из нужного места его берут.


Поделиться с друзьями:

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

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

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.008 с.