Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Топ:
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Интересное:
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Дисциплины:
2022-10-10 | 48 |
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хочет положить, ну да и мы знаем куда в локальный поток», «О! он хочет его прочитать!» и они из нужного места его берут.
|
|
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!