Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Топ:
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Интересное:
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Дисциплины:
|
из
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-2025 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!