Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Топ:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Интересное:
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Дисциплины:
2022-10-10 | 41 |
5.00
из
|
Заказать работу |
|
|
Ответ: Тот самый «конечный автомат»:
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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!