Содержание

что это и как в него войти

Чтобы описать, что такое состояние потока (или потоковое состояние), предлагаем вам вспомнить ситуацию, когда вы были полностью погружены в какое-либо занятие, не важно, по работе, учебе или чему-либо еще. Речь идет о тех моментах, когда вы насколько уходили в задачу, что слабо реагировали на происходящее вокруг или вообще не замечали, при этом ваша работа шла более чем успешно. Наверняка вы когда-либо испытывали подобное состояние и впоследствии радовались полученным результатам – тому, что смогли столько сделать, да еще и за такой короткий промежуток времени.

Именно это в психологии и называется состоянием потока. Его главные характеристики – высокая работоспособность, полная сосредоточенность на своей деятельности, высокая активность в рамках текущего занятия. Кроме того, человек в потоке демонстрирует позитивный настой, уверенность в себе и в своих силах. Все это приводит к тому, что мы справляемся даже со сложными задачами, находим необычные способы их решения и в целом демонстрируем необычную эффективность. К сожалению, данное волшебное состояние не всегда приходит тогда, когда мы в нем нуждаемся. Хорошая новость – научиться входить в поток все же можно (по крайней мере – в определенной степени). В этой статье мы предлагаем ряд советов, как попасть в потоковое состояние, а также более полно раскрываем само содержание этого понятия.

Состояние потока: особенности понятия

Данный термин и концепцию такого состояния предложил американский психолог венгерского происхождения Михай Чиксентмихайи. Он отмечал, что состояние потока знакомо человечеству с незапамятных времен и является частью некоторых культур, особенно восточных. Изучая данное явление, Михай Чиксентмихайи провел ряд исследований, обобщил весь имеющийся опыт и разработал рекомендации по тому, как войти в состояние потока. Собственно, в ходе данной работы и родилось столь поэтическое название. Его подсказали сами испытуемые. Описывая свои чувства и ощущения, некоторые говорили, что их будто несет поток (вероятно, имелось в виду, что занятие их полностью захватывает, подхватывает сознание и будто несет его). Так и появился термин «потоковое состояние сознания».

Прежде чем переходить к подробному описанию данного явления, отметим, что существует несколько подходов к тому, что можно назвать состоянием потока. Некоторые видят его как некий выход на новый информационный уровень, подключение к энерго- и инфополю земли/космоса или иные подобные вещи. Подразумевается, что человеку в состоянии потока удается вообще все, за что он берется, что он выдает на гора отличные идеи практически по любой теме, его сознание становится едино с телом и всеобщим инфополем и т.д. На наш взгляд, такое состояние потока, скорее, подходит для некоторых религий, околопсихологических, парапсихологических и иных практик. Так или иначе, такие состояния в рамках наших статьей мы не рассматриваем. Наша сфера – вхождение в состояние потока для решения конкретных задач – рабочих, учебных, бытовых или каких-либо других. Мы предлагаем практическое использование этого состояния, без ориентации на очищение сознания и достижения единения души и тела.

С другой стороны, порой состоянием потока называется просто погруженность в работу, сконцентрированность и сосредоточенность на ней. Конечно, данные качества сами по себе очень полезны, однако мы под этим явлением понимаем нечто большее – в частности, повышенные эффективность, работоспособность, полное погружение, определенный эмоциональный настрой. В частности, как отмечали испытуемые Михая Чиксентмихайи, в состоянии потока они испытывали легкую эйфорию. Ниже мы представляем подробное описание этого явления. Ознакомьтесь с ним, и вы поймете, почему для нас «состояние потока» и «погруженность в работу» – разные понятия.

Отличительные черты состояния потока

Итак, главные черты состояния потока – максимальная производительность и работоспособность, а также абсолютное погружение в то, что вы делаете. Под этим подразумевается полная сосредоточенность, концентрация внимания только на текущей задаче, иное чувство времени. Например, поработав в состоянии потока, вы можете удивиться, что прошло так много времени, с тех пор как вы приступили к той или иной задаче. С другой стороны, вы обязательно порадуетесь, что за такой срок удалось сделать больше, чем обычно. В такие моменты принято говорить,

что работа ладится или спорится, а скорее – горит в руках.

Весьма важны и психологические аспекты этого состояния: спокойствие, уверенность в себе и в своей компетенции, положительные эмоции, связанные с тем, что вы делаете, а также с тем, что задача удается. Человек в состоянии потока трезво оценивает свои силы: ему не кажется, что он способен достать Луну, и он понимает, что может сделать, а что нет. Одновременно неудачи не воспринимаются как трагедии, а стимулируют к новым попыткам, в том числе к изменениям в своем поведении.

Еще одна черта – четкое осознание конкретных целей. Как известно, без целеполагания быть эффективным достаточно проблематично. В частности, если нет цели, то нет и понимания, в какую сторону двигаться и какой результат считать достигнутым. Когда человек находится в состоянии потока в работе, учебе, хобби и т.д., он понимает, какова его цель и что нужно делать, чтобы достичь ее. Все вышеперечисленное дает ощущение контроля над ситуацией, что также способствует получению лучших результатов.

Как войти в состояние потока

Как мы уже говорили, далеко не ко всем состояние потока приходит по заказу. Однако можно попробовать «призвать» это явление. Мы приведем несколько советов, как войти в потоковое состояние и удерживать его. Как и все универсальные советы, они нуждаются в модификации под ваш характер, под условия конкретной задачи и в целом под вашу ситуацию. Попрактиковавшись, вы поймете, что лучше всего работает для вас в том или ином случае.

Заметим также, что следование этим советам в целом поднимет вашу продуктивность. Иными словами, даже если у вас не получится (или не сразу получится) достичь делаемого состояния потока, втуне ваши старания точно не пропадут.

Замотивируйте себя

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

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

Начните

Чтобы погрузиться в задачу ее важно начать, а этому часто мешает, в частности, прокрастинация. Ознакомьтесь с нашими советами, как ее победить.

Другая ситуация – иногда человек не знает, как, с какой стороны взяться за задачу, из-за чего никак не приступит ее выполнению. Например, многим журналистам нужно написать первую фразу или первый абзац, после чего работа идет как по маслу (в том числе в состоянии потока). В свою очередь, пока нет первой фразы, работа категорически не идет. Если вам мешает нечто похожее, подумайте, можете ли вы приспособить под себя прием таких журналистов: написать первый абзац в черновом варианте, заранее зная, что он потом будет удален или существенно переписан. Главное, чтобы на листе было начало текста, хотя бы в зачаточном состоянии, – и это позволит погрузиться в работу. Конечно, свой труд удалять бывает жалко, однако для многих данный способ отлично помогает как можно быстрее перейти к активной и полезной деятельности.

Войдите в работу

Данный совет можно назвать смежным с предыдущим. Чтобы погрузиться в работу/учебу и т.д., а затем войти в состояние потока, можно использовать какой-либо ритуал, который настроит вас на нужный лад и послужит своеобразным переходом от праздного ничегонеделания (или от каких-либо личных дел) к выполнению необходимых задач. Такой ритуал позволит вам сказать самому себе, что работа началась, даст время вспомнить, на чем вы закончили вчера, что хотели сделать и т.д. Это может быть заваривание кофе, работа со списком дел, полив цветов и т.д.

Контролируйте соотношение сложности и простоты задачи

Михай Чиксентмихайи отмечал, что состояние потока легче всего достичь, когда задача оптимально соответствует вам по соотношению сложности и простоты.

Слишком простая задачка будет скучной, за слишком сложную не захочется браться. Если вам предстоит выполнить простое, но большое и занудное дело, усложните его – например, как мы говорили выше, привнесите в нее элемент игры, устройте соревнование с самим собой или с коллегой. Что касается слишком сложных задач, то одним из универсальных советов станет другой совет, озвученный выше: разбейте большое дело на несколько дел поменьше. Поставьте ряд промежуточных целей и двигайтесь от одной к другой. Это сделает задачу в целом более понятной и восприниматься она будет как более легкая. Кроме того, такой принцип покажет, нужно ли вам сделать что-то такое, что вы действительно не сможете выполнить самостоятельно.

Ставьте себе конкретные цели

И еще один совет, смежный с началом работы. Иногда вход в состояние потока осложняется тем, что мы заранее боимся задачи – она кажется слишком большой или слишком сложной. В таком случае рекомендуется разбить большую задачу на ряд небольших. И соответственно, большая цель (сделать отчет) превращается в ряд конкретных промежуточных эпатов (собрать статистику за август, собрать статистику за сентябрь, сравнить данные за август и сентябрь, сделать вывод). Такой подход весьма эффективен, а потому часто применяется очень часто и с самыми различными целями. С точки зрения состояния потока он позволяет четче видеть конечную цель и понять, как ее можно достичь, дает вам чувство большего контроля над ситуацией, который, как мы отмечали выше, весьма важен для состояния потока и достижения пиковой эффективности.

Слушайте музыку

Используйте силу музыки, что настроить себя на рабочий лад, повысить продуктивность и способствовать погружению в состояние потока. При этом многие отмечают, что для них большую эффективность имеет прослушивание в наушниках, так как оно помогает заглушить посторонние разговоры и звуки и параллельно тонко намекает окружающим, что их пользователь «вне зоны доступа». Музыка способна создавать настроение,

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

Например, кому-то мешают песни на русском языке, потому что слушатель начинает концентрироваться на тексте, а не на текущей задаче. Кому-то не подходят песни на изучаемом иностранном языке, так как он начинает переводить текст. Кого-то вообще отвлекает человеческий голос, и такому человеку лучше перейти на инструментальную музыку. Иногда работоспособности хорошо помогают жанры, которые для собственного удовольствия вы никогда бы не стали слушать. А бывают случаи, когда наибольшей эффект оказывают звуки природы, дождя, поезда, белый шум и т.д. Поэкспериментируйте – и найдите то, что поможет вам войти в потоковое состояние.

Не ждите чудес

Не требуйте от себя невозможного. Если накануне вы спали три часа, если у вас что-то болит и т.д., достичь состояния потока будет намного сложнее, как и вообще быть эффективным и продуктивным. Заметим, что максимальная работоспособность (и тем более состояние потока) вряд ли придут к вам и в том случае, если ваша голова в данный момент забита другими проблемами, вы волнуетесь, с нетрепением ждете чего-либо и т.д. Конечно, говорят, что работа позволяет отвлечься, и для многих это действительно так. Но прежде чем войти именно в состояние потока, вашему сознанию придется выкинуть все лишнее (чему будет способствовать работа). Если вам нужно погрузиться в состояние потока как можно быстрее и эффективнее, сначала постарайтесь успокоиться и по возможности избавиться от мучающей вас проблемы. Средства упокоения у каждого свои. Например, это могут быть дыхательные практики, прогулка в парке, горячий кофе, разговор с близким.

Не отвлекайтесь

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

Надо сказать, что переключения на сторонние задачи – настоящий бич состояния потока. Считается, что войти в него даже проще, чем удерживать, ведь его очень легко спугнуть. Выход плох в том числе тем, что потом вы, вероятно, уже не сможете вернуть себе ту же эффективность. Кроме того, на повторный вход вам в любом случае потребуется время. Поэтому постарайтесь оградить себя от лишних раздражителей (или соблазнов). В частности, закройте все лишние программы на компьютере (особенно игры и соцсети), по возможности отключите почту и мобильный телефон и т.д. На работе можно договориться с коллегами по поводу табличек «Не беспокоить!», чтобы не отвлекать друг друга и не мешать сосредоточенности только на одной задаче.

И в заключение еще один важный момент. Будучи в состоянии потока, не игнорируйте советов интуиции. Практика показывает, что в таком состоянии людям могут приходить весьма неординарные решения, которые отбрасываются, потому что кажутся неприемлемыми или странными. Используйте все преимущества состояния потока и цените подсказки от подсознания.

что это и как научиться в него входить

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

Наш автор — Оксана Пацеля, бизнес-тренер, карьерный коуч, основатель и бизнес-тренер центра развития личности Self made Person.

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

Это состояние, когда вы полностью погружены в процесс создания и совершенно забываете о бытовых проблемах, усталости. Не думаете о том, что происходит вокруг, абсолютно увлечены своим делом и получаете от этого кайф. В такие моменты как раз и появляются неожиданные идеи и новые результаты.  

Такое состояние известный психолог Михай Чиксентмихайи назвал потоком. Именно оно помогает нам применять свои таланты наилучшим образом. И дарит ощущение полной удовлетворенности своей работой. 

Почему состояние потока так важно?

  • Ежедневно мы уделяем работе минимум 60-80% своего времени и внимания. И за пределами офиса продолжаем в уме прокручивать рабочие вопросы. То, какие чувства возникают у нас в процессе работы, напрямую влияет на качество нашей жизни. Именно поэтому важно, чтобы в вашей деятельности присутствовало состояние потока.
  • Пребывание в состоянии потока способствует развитию личности. Потому что оно всегда появляется на точке пересечения сложности задачи и уровня наших компетенций. Повышая себе планку, мы развиваем новые навыки. Именно в этот момент легко войти в поток.
  • В природу потокового переживания встроена необходимость развития. Надо постоянно нарабатывать уровень мастерства. Потому что поток начинается там, где выполняемая задача создает вызов и возникает необходимость развития существующих умений или получения новых навыков.
  • В состоянии потока наша деятельность становится самоценной, наполняет жизнь смыслом и приносит большую удовлетворенность.
  • Умение входить в состояние потока увеличивает продуктивность и ускоряет обучение в 2-3 раза! Только задумайтесь — мы становимся в несколько раз продуктивнее в деятельности, которая нас полностью увлекает.
  • Потоковые состояния характеризуются ощущением огромной внутренней ясности того, что и для чего вы делаете. Это помогает вам понять свои цели, ценности и внутреннюю мотивацию.

 

Как узнать это состояние?

Как и каждое состояние, поток имеет свои характеристики. Когда люди описывают свои переживания, они чаще всего называют некоторые из следующих составляющих.  

  • Полная концентрация и сосредоточенность.
  • Ясные цели. Вы четко понимаете, что хотите получить в результате.
  • Задача с вызовом. Вызов обязательно должен быть чуть выше среднего уровня сложности.
  • Баланс между сложностью выполняемой задачи и существующими навыками для ее выполнения.
  • Быстрая обратная связь. Вы сразу видите результат своей работы и можете внести корректировки. Обратная связь может быть как внешней (например от других людей), так и вашей внутренней.
  • Ощущение времени теряется, часы пролетают на одном дыхании.
  • Освобождение сознания от забот и тревог повседневной жизни.
  • Ощущение полного контроля над происходящим.

Что нужно, чтобы войти в поток?

Исследования показали, что можно научиться самостоятельно создавать состояние потока в любом виде деятельности.

1. Учитесь  концентрации

Для состояния потока важно научиться ставить цели и концентрироваться на них. Помешать этому может беспокойство и избыток задач.

Чтобы снять напряжение, лишнюю суету и беспокойство:

  • очистите голову от лишней информации — запишите на листе бумаги все обрывки мыслей, которые не дают вам покоя;
  • найдите то, что вас расслабляет — теплый душ, чай с медом, прогулка;
  • разделите задачу на последовательность мелких и конкретных шагов — это позволит успокоиться и сосредоточиться на одной задаче.

Чтобы  сконцентрироваться, ищите свои собственные техники. Это могут быть:

  • дыхательные упражнения;
  • конкретный аромат;
  • мелодия;
  • определенные  воспоминания, места, образы.

Главное — сформировать взаимосвязь между применением конкретного приема и состоянием концентрации. Приемы должны войти в привычку. Сделайте их своими ритуалами. Постепенно мозг сформирует устойчивые нейронные связи и привыкнет реагировать на эти стимулы определенным образом.

Сконцентрироваться на важном и войти состояние потока поможет наш таймер-плеер Moody

Moody

2. Делайте то, что вам действительно нравится

В тех видах деятельности, которые захватывают и доставляют радость, поток возникает естественным образом. Наполняйте свою деятельность задачами, которые вам интересны. Вам доставляет удовольствие ваша работа? Это явный признак того, что вы в потоке. Ищите радость и смысл в своей привычных задачах, а если это невозможно, — есть повод задуматься.

3. Поднимайте свою планку 

Вы уже знаете, что поток — это баланс между вызовом и навыками. Посмотрите на свою деятельность. Где вы чувствуете скуку или расслабленность? Для развития мастерства необходимо поднимать сложность задач. Без этого нас засасывает рутина, в которой поток не возникает. Чтобы создать состояние потока, необходимо увеличить сложность задач. Только в таких условиях вы сможете почувствовать необходимость что-то делать по-другому: изучить новую информацию, разработать новый подход, придумать новые идеи, создать уникальную программу…

Оказывается, самые радостные моменты в нашей жизни связаны с состоянием, когда мы стремимся добиться чего-то трудного и ценного.  

4. Развивайте свои компетенции

Получайте новые знания, чтобы справляться с новыми вызовами. Тогда у вас получится постоянно практиковать пункты 2 и 3.

Чтобы лучше понять феномен состояния потока, рекомендую читать книги Михая Чиксентмихайи: «Поток. Психология оптимального переживания», «В поисках потока. Психология включенности в повседневность», «Эволюция личности», «Бегущий в потоке».

 Читайте также

Как защитить себя от выгорания: полезная практика от коуча

Скорочтение: 10 советов, как научиться быстро читать

Как необычный поход помогает восстановить ресурс и найти себя

У нас есть много вакансий в креативных индустриях, образовании, IT-компаниях и общественном секторе →

Вакансии

Как легко войти в состояние потока: практические рекомендации

Елена Глазунова

Визуализационный коуч, эмпат,психолог.
Глубоко чувствую и понимаю людей.
Бережно помогу увидеть подводную часть айсберга,найти корневые причины трудностей, открыть свои светлые,сильные,ресурсные качества и МЕЧТУ превратить в ЖИЗНЬ ЯРКУЮ И НАСТОЯЩУЮ

1 133

Время Чтения: 3 мин.

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

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

Абрахам Маслоу называл потоковые состояния пиковыми переживаниями. «Лучшие моменты жизни не те, когда мы расслаблены, пассивны, разнежены. Лучшие моменты обычно случаются, когда человеческое тело и ум работают на пределе возможностей в добровольной попытке осуществить нечто ценное и важное», сказал Михай Чиксентмихайи, один из основоположников позитивной психологии.

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

Быть в потоке возможностей: 6 способов привлечь изобилие и благословение

Состояние потока у творческих людей

Многие великие творческие люди как в прошлом, так и современники, признавались, что не сами придумывают музыку, ставят танцевальные постановки и тому подобное. Они как бы слышат, видят это и только записывают. В этот момент человек переживает состояние, близкое к экстазу.

Бесплатный мастер-класс «КОУЧ — ПРОФЕССИЯ БУДУЩЕГО».

При регистрации бонус Чек лист 7 Шагов самокоучинга!

Мой личный опыт так же подтверждает это. Когда-то я делала танцевальные постановки. Включала музыку, закрывала глаза, и как на экране смотрела фильм с танцем. Даже если танец был групповой и каждый участник выполнял разные движения, я видела и отслеживала всех одновременно! Оставалось только быстро законспектировать увиденное и продолжать.

А работа на сцене? Ведь не секрет, артисты такие же люди и не всегда бывают в ресурсе. Но, если перед выступлением войти в состояние потока, то уже не танцуешь, а летаешь! Это невероятное соединение и с залом, и с чем-то высшим! Это незабываемо! И зрители в восторге!

Как войти в удивительное состояние потока?

Есть два вида потока. Нисходящий и восходящий.

  • Первый больше для понимания глубины, для работы с потаёнными от человеческого сознания вещами.
  • Второй нацелен на действия. По ощущениям они очень похожи, но все же есть разница.

Давай рассмотрим оба варианта.

Восходящий поток

  • Есть только здесь и сейчас, ничего кроме. Ты полностью сконцентрирован на задаче;
  • Ты чётко понимаешь, что нужно делать и как;
  • Потеря связи со временем, ты не замечаешь его ход;
  • Получаешь удовольствие от процесса;
  • Слияние мыслей и действий. Отсутствует «мысленная жвачка»;
  • Полное доверие себе и этому состоянию. Полное отсутствие контроля. Ты течёшь.

Как из любой эмоции получать энергию и создавать состояние потока?

Нисходящий поток

  • Ты наполнен любовью;
  • Ты чувствуешь связь со всем миром;
  • Ты мудр;
  • Ты тих;
  • Ты чуток;
  • Ты полностью доверяешь себе и этому состоянию. Полное отсутствие контроля. Ты течёшь.

Оба потока одинаково прекрасны и приводят к одинаковому результату. Отличаются они лишь внутренними ощущениями. Выбирай любой, какой ближе.

Затем возьми список состояний, попробуй прочувствовать каждое. Сначала по отдельности, а потом соединив их вместе в себе. Многие, находясь в состоянии потока, видят в себе белое или золотое свечение.

Так же вхождению в потоковое состояние помогает упражнение «мысль, стоп». Ты останавливаешь в своей голове все мысли и картинки. Ничего нет, пустота. И удерживаешь это состояние как можно дольше. Сначала трудно, потом это входит в привычку.

Человек не может 24/7 находиться в состоянии потока, но очень важно научиться входить в него тогда, когда это нужно!

Не пропускай самые интересные публикации для личностного роста.
Подписывайся на нас в той социальной сети, которую любишь больше всего: Instagram, Facebook, Telegram.

Елена Глазунова

Визуализационный коуч, эмпат,психолог.
Глубоко чувствую и понимаю людей.
Бережно помогу увидеть подводную часть айсберга,найти корневые причины трудностей, открыть свои светлые,сильные,ресурсные качества и МЕЧТУ превратить в ЖИЗНЬ ЯРКУЮ И НАСТОЯЩУЮ

Три шага, чтобы войти в состояние потока

Поток — состояние, в котором задачи заставляют выкладываться, но при этом не лишают мотивации. Время словно замедляется, мы легко абстрагируемся от всего, что прежде отвлекало. Войти в него помогут три простых шага.

1. Определите, что вас отвлекает

Домочадцы? Ищите другие места, где можно работать: площадку для коворкинга или библиотеку. Чувствуете себя неуютно в открытом пространстве с высокими потолками, значит, университетская библиотека не для вас. Отвлекают соцсети? Отключите интернет.

2. Получайте удовольствие

Это явный признак того, что вы в потоке. На выходные запланируйте работу над проектами, которые вам очень интересны. Цель — получить максимальное удовольствие. Если начнете терять концентрацию, включите музыку, покрутите спиннер, выполните дыхательную гимнастику. Отмечайте варианты, которые помогают сосредоточиться.

3. Составьте список приемов, которые помогают концентрироваться

Нужно сформировать взаимосвязь между состоянием концентрации, применением конкретной техники и выполнением задачи. Эти приемы должны войти в привычку. Когда окажетесь в отвлекающей обстановке, сможете использовать эти техники, чтобы войти в состояние потока. Возможно, способ будет простым: например, сделать дыхательную гимнастику и послушать любимую песню.

Запахи и воспоминания

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

Музыка и настроение

Музыка тоже активно влияет на эмоции и мотивацию. Быстрый темп улучшает концентрацию и повышает продуктивность, медленные успокаивающие мелодии помогают расслабиться.

Занятия спортом

Физическая активность настраивает мозг на концентрацию. Упражнения повышают нейротрофический фактор мозга — белок, необходимый для памяти и обучения, снижают тревожность, улучшают краткосрочную память и налаживают гормональный баланс. Даже небольшая физическая нагрузка положительно сказывается на химических процессах в мозге.

Чтобы научиться входить в состояние потока, требуется практика. Навык нужно развивать, как любой другой. Сохранять концентрацию проще, когда вы делаете то, что нравится. Чем чаще будете заниматься любимыми делами и пребывать в состоянии потока, тем проще вам будет войти в него, когда потребуется.

Как войти в состояние потока

Кругозор

Как войти в состояние потока

3 августа 2018
20 758 просмотров

Сергей Капличный

Вы заняты делом и вас ничто не отвлекает — ни тревожные мысли, ни желание перекусить, ни эмоциональные возгласы коллег. Вы находитесь здесь и сейчас и полностью сосредоточены на задаче. Знакомая ситуация? Такое состояние принято называть «потоком». Его сложно поймать и удержать, но есть парочка советов, которые помогут как можно чаще испытывать подобные моменты. Именно о них мы сегодня и поговорим.

Что такое поток?

Термин «поток» был введен в 1970-х годах психологом Михаем Чиксентмихайи, изучавшим причины, по которым люди согласны пожертвовать материальными благами «в обмен на ускользающее ощущение удовольствия, приносимого некоторыми действиями», например скалолазанием. У всех нас были моменты попадания в поток. Мы с головой погружались в то, что делаем, — будь то спорт, игра на музыкальном инструменте или прослушивание музыки, работа над каким-либо проектом. Когда мы, опомнившись, смотрели на часы, оказывалось, что прошло уже пять часов, на улице стемнело, а наш мочевой пузырь вот-вот лопнет, — мы были так сосредоточены, что ничего не замечали.

Вот как это ощущение описывает сам Михай: «Быть полностью вовлеченным в деятельность ради нее самой. Эго отпадает. Время летит. Каждое действие, движение, мысль следуют из предыдущей, словно играешь джаз. Все твое существо вовлечено, и ты применяешь свои умения на пределе».

Определите цели

Понимание того, чего вы хотите добиться, — это первое важнейшее условие достижения состояния потока. Думая только о конкретной цели, вы имеете больше шансов достичь ее. В то же время следует помнить о том, что умение приспосабливать ваши цели к текущему моменту — например, к тому, что уровень ваших способностей или сложность задачи могут быть ниже или выше, чем ожидалось, — позволяет вам более полно использовать ваш потенциал в конкретной ситуации.

Наличие у человека ощущения того, что серьезность стоящей перед ним задачи соответствует его возможностям, безусловно, является важнейшей составляющей потока.

Контролируйте соотношение сложности и простоты задачи

Обучение навыкам важно для возникновения состояния потока. Нужно хорошо знать свое дело. И то, как мы упражняемся, имеет ключевое значение для обучения.

Сложная задача + Высокое мастерство = Поток

Нужна золотая середина — когда не слишком сложно и не слишком легко, а как раз то, что нужно. Задача должна подвергнуть наши способности некоему испытанию на прочность, но не мучить. Мы переживаем состояние потока, когда достигаем баланса между сложностью задачи и навыками, которые необходимы для ее выполнения.

Прекратите отвлекаться

Все что угодно может отвлечь внимание от текущей задачи. Постоянно прерываясь, вы не сможете ни достичь состояния потока, ни удержать его. Бесконечная многозадачность — враг потока. Нужно полностью сосредоточиться на том, что вы делаете, и мобилизовать для этого все ресурсы.

Выйдите из твиттера, выключите телефон и устраните все, что вам мешает. Научитесь действовать стратегически, чтобы работать более эффективно в течение всего дня.

Следите за эмоциями

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

Чтобы создать правильный импульс для потока, вам обязательно нужно успокоиться и собраться.

Наслаждайтесь

И самое главное на этом пути — наслаждаться каждым его мгновением. До того, как вы почувствовали состояние потока, во время и после. Не прекращайте наслаждаться тем, что с вами происходит.

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

По материалам книг «Бегущий в потоке», «Книга Ленивого Гуру», «Зависимый мозг», «SuperBetter».

Состояние потока: как управлять мотивацией и побороть прокрастинацию

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

Материал подготовлен экспертами курса «Мастерство учиться» от издательства «МИФ».

Мотивация взрослых

Мотивацию делят на внутреннюю — когда мы ставим цели и получаем удовольствие от их достижения и внешнюю — признание других.

Внутренние мотиваторы эффективнее внешних. Саморефлексия эффективнее публичных рейтингов. При этом внешняя мотивация действует быстрее. Например, представьте работу над проектом, который вам не очень интересен. Если во время подготовки проекта вы выиграете в конкурсе, мотивация резко взлетит, но эффект будет кратковременным. Если вы с самого начала верите в проект и вкладываете в него максимум усилий, то именно эта вера будет вашей долгосрочной внутренней мотивацией.

Если вы привыкнете полагаться только на внешнюю мотивацию, вам будет намного сложнее вернуть внутреннюю. С возрастом именно внутренняя мотивация становится для нас ключевой, а развитие через принуждение и оценку не работает. Например, многие сотрудники в компании воспринимают обязательные образовательные тренинги как очередную повинность, а не возможность научиться новому.

Пять принципов обучения взрослых

Науку обучения взрослых называют андрагогикой. Принципы обучения взрослых обозначил один из основоположников андрагогики Малколм Ноулз. Ноулз считает, что взрослые учатся ради решения конкретных жизненных задач, а не ради абстрактных оценок и отвлеченных знаний, которые когда-то пригодятся. Именно поэтому популярная среди менеджеров теория вознаграждения не работает.

Чтобы чему-то научиться или кого-то научить, помните о пяти принципах, которые влияют на мотивацию взрослых:

  1. Самооценка. По мере взросления самооценка человека становится более независимой от других людей.
  2. Опыт. Опыт взрослых — важный ресурс для обучения.
  3. Готовность к обучению. Взрослые ориентируются на развитие своих социальных ролей.
  4. Ориентация на обучение. Взрослые учатся, чтобы решать конкретные задачи. Чтобы их заинтересовать, нужно четко обозначить проблему и объяснить, почему ее важно научиться решать.
  5. Мотивация. Взрослые приобретают внутреннюю мотивацию учиться.

Теория потока — способ сделать обучение интересным

Если процесс работы не приносит удовольствия, человек теряет цель и мотивацию. Американский психолог Михай Чиксентмихайи заметил: люди, которые испытывают радость от текущей работы, находятся в определенном состоянии. Чиксентмихайи назвал его состоянием потока. Это состояние, когда мы максимально увлечены и вовлечены в то, чем занимаемся. Например, сели писать картину и не заметили, что прошло уже два часа. Или когда во время сосредоточенной работы останавливается внутренний диалог: в состоянии потока он направлен в одну сторону — на то, чем мы занимаемся.

Михай Чиксентмихайи выяснил, что в состояние потока можно входить, когда вам необходимо. Любая деятельность может быть потоковой. Чтобы войти в поток, нужно мысленно разложить ее на три составляющие.

  1. Ясные цели. Научитесь самостоятельно ставить цели и корректировать их по шкале «сложно/скучно». Если задача слишком сложная, ее стоит упростить, если скучная и простая — усложнить.
  2. Внимание. Направляйте внимание на саму деятельность и учитесь тормозить внутренний диалог, который вас отвлекает.
  3. Обратная связь. Давайте обратную связь самому себе на протяжении всего времени обучения. Контролируйте свой путь к достижению целей.

Отвечайте на эти вопросы, чтобы войти в состояние потока

Эксперт курса «Мастерство учиться» и автор проекта Lifelong Learning Lab Рената Гизатулина считает, что сделать процесс обучения увлекательным поможет теория потока. Чаще всего состояния потока просыпаются в процессе творчества, но проявляются в и других видах деятельности. Чтобы создать состояние потока, важно сформулировать ясные цели и задачи — не слишком легкие и не слишком сложные. Если цели неясны, мы испытаем фрустрацию. Потоковое состояние находится где-то посередине между двумя крайностями: тревоги и скуки.

Задача должна быть настолько сложной, чтобы наших навыков и опыта хватало для ее выполнения

Если мы хотим сделать процесс обучения увлекательным, нужно ставить задачи, для которых требуется чуть больше навыков, чем у нас есть сейчас. Например, мы не выучим английский язык, если читаем слишком легкую книгу. Нужно взять такую книгу, в которой мы понимаем только 70% текста. Стоит всегда выбирать сложную, но посильную деятельность.

Прокрастинация — палка в колесе мотивации

Если вы научитесь управлять своей мотивацией и входить в состояние потока, любая задача станет для вас приятной и посильной. Но на пути к эффективной работе есть еще одно очень распространенное препятствие — прокрастинация.

Специалист по продуктивности и автор книг «Путь джедая» и «Джедайские техники» Максим Дорофеев сравнивает прокрастинацию с болью. Боль — это полезный сигнал о том, что с нами что-то не так. То же самое с прокрастинацией. Если мы постоянно откладываем важные и полезные дела на потом — это сигнал.

Одна из основных причин прокрастинации — усталость. Ее не следует принимать за лень и игнорировать. Эти два состояния похожи: мы лежим и ничего не хотим делать, но крайне опасно их путать. Если в состоянии усталости вы будете говорить себе: «Соберись, тряпка! Выходи из зоны комфорта!», — то просто убьете себя. Мы просыпаемся, идем на работу, убиваемся, а вечером хотим найти силы на саморазвитие или занятия английским языком. Чтобы проверить, ваш ли это случай, попробуйте учиться утром на «свежую» голову.

Другая причина прокрастинации — «эффект установки», когда из-за идеи или направление решения вы не замечаете качественные альтернативы. Если вы чувствуете, что прокрастинируете над задачей, задумайтесь: зачем она вам нужна.

Перфекционизм тоже является полем развития прокрастинации. Первая заповедь перфекциониста-прокрастинатора: «Лучше сделать хорошо, но никогда, чем кое-как, но сегодня». Максим не рекомендует «начать хоть как-нибудь» — помните про усталость. Если вы уставший человек и начнете себя подталкивать, в какой-то момент сломаетесь.

Кальсонные гномы из «Южного парка» не задумывались, как именно будут зарабатывать

Еще одна причина прокрастинации — ложные желания. Их еще называют кальсоногномизмом, по мотивам эпизода «Южного парка» про кальсонных гномов. По ночам кальсонные гномы пробирались к мальчишкам в комнаты и воровали трусы, чтобы на них заработать. Но как именно это сделать, они не задумывались. Часто мы ведем себя как кальсонные гномы: например, записываемся на фитнес, ожидая получить профит. Но точно ли ваше решение — оптимальный путь к этому профиту? Беда в том, что такие решения оттягивают внимание от более важного. Вы можете чувствовать это подсознательно и включать прокрастинационный механизм защиты. Проверочный вопрос на предмет ложных желаний: «А у вас внутри бабочки шевелятся, когда вы думаете об этом деле?»

Не все, что мы делаем, должно быть приятно. Но если таких ощущений в вашей жизни не вызывает ничего, это засада и прямой путь к выгоранию.Часто прокрастинация — это совсем не плохо. Просто кто-то внутри сдерживает вас от ненужных поступков. Подумайте об этом.


Больше информации и новостей о трендах образования в нашем Telegram-канале. Подписывайтесь.

Что такое состояние потока и как в него войти

  • Элис Робб
  • BBC Capital

Автор фото, Unsplash

Состояние потока (флоу) — это полная концентрация на том, чем вы занимаетесь, сопровождаемая легкостью и ощущением удовлетворенности. Что это? Внезапное озарение или осознанность?

Американский психолог венгерского происхождения Михай Чиксентмихайи в детстве наблюдал, как взрослые пытались восстановить свою жизнь в разрушенной Второй мировой войной Европе. У многих тогда опускались руки.

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

Чиксентмихайи впоследствии переехал из Венгрии в США, где стал изучать психологию и вопрос, который не давал ему покоя с детства, — какую роль в формуле счастья играет богатство.

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

В результате, как он позже вспоминал в своем выступлении на TED, он начал исследовать, «когда и как в повседневной жизни, мы чувствуем себя действительно счастливыми?»

Ученому казалось, что ответ на этот вопрос нужно искать у людей, которые занимаются творчеством: художников, музыкантов, литераторов.

Автор фото, Getty Images

Підпис до фото,

Состояние потока, то есть полное сосредоточение на самом деле, когда теряешь ощущение времени и самого себя, чаще всего ассоциируют с людьми творческих профессий

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

Возможно, сам процесс приносит удовольствие? Ради чего они готовы идти на жертвы? Один композитор рассказал Чиксентмихайи, что когда работа удавалась, он переживал нечто вроде экстаза.

В такой момент, казалось, он терял ощущение времени, и музыка просто «лилась». Позже подобное состояние описывали Чиксентмихайи спортсмены, поэты или шахматисты.

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

Это было 40 лет назад. Чиксентмихайи, как и многие другие психологи из разных стран, изучали опыт гималайских альпинистов, монахов доминиканцев, пастухов племени навахо и тысяч других людей.

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

Что это?

Состояние потока имеет несколько составляющих.

«Это — интенсивная концентрация, приводящая к ощущению экстаза и абсолютной ясности того, что нужно делать в каждый последующий момент», — отметил Чиксентмихайи в своем выступлении на TED в феврале 2004 года.

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

Некоторые называют это состоянием высшей сосредоточенности «пребыванием в зоне». Впрочем, как бы это состояние не называли, важно, что оно отражается не только на сознании, но и на физиологии.

Шведское исследование 2010 года выяснило, что у пианистов, вошедших в состояние потока, возникало углубленное дыхание и замедленное сердцебиение. Активировались даже мышцы лица, к примеру, отвечающие за улыбку.

Автор фото, Getty Images

Підпис до фото,

Впрочем, для завершения крупного проекта творческого экстаза недостаточно

Впрочем, преимущества этого состояния выходят за рамки мгновенного экстаза. Этот опыт приносит удовольствие и дарит ощущение жизни и счастья.

В профессиональной деятельности он связан с производительностью, мотивацией и преданностью делу.

Некоторые люди более склонны к этому состоянию. Это касается прежде всего личностей с высоким уровнем добросовестности, открытости опыту и низким невротизмом.

Однако можно ли сознательно переходить в это состояние, если оно не «посещает» вас просто так?

Как достичь?

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

«Основным препятствием является громкая среда и соблазн отвлечься», — говорит Джованни Монета, ученый-психолог из Лондонского университета Метрополитен и автор работы «Положительная психология: критичное вступление».

То, чем вы занимаетесь, также имеет значение. «Это дело должно быть важным для вас, значимым и сложным, но мы должны понимать, что оно нам по силам», — добавляет ученый.

Состояния потока легче достичь в деле, в котором мы имеем достаточно практики. Вспомните уверенность опытного фигуриста на льду или певца у микрофона.

Автор фото, Unsplash

Підпис до фото,

Это дело должно быть важным для вас. И еще сложным, но при этом посильным

Соответствующим должен быть и уровень сложности: не слишком легким, чтобы вам не стало скучно, но и не тяжелым, чтобы дело не превратилось в стресс.

Конечно, это состояние далеко не всегда поддается контролю.

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

Однако мы можем увеличить вероятность его наступления.

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

Первый шаг — осознанность

Если потока вам достичь никак не удается, поставьте себе цель добиться состояния осознанности, который по своей сути очень ему близок.

«Единственная разница заключается в том, что осознанность доступна любому практически всегда», — говорит Эллен Лангер, профессор психологии из Гарварда и автор нескольких книг об осознанности, творчестве и вере.

Автор фото, Unsplash

Підпис до фото,

Осознанность не ограничивается рамками йоги и медитации, ее можно достичь в любом деле

Состояние осознанности имеет почти те же преимущества, что и поток:

«Когда человек находится в этом состоянии, у него снижается давление, и другие физиологические проявления также свидетельствуют о лучшем самочувствии. Человек в осознанном состоянии кажется другим харизматичным. Она здоров, счастлив, у него улучшаются отношения с окружающими. И ему лучше удается то, чем он занимается», — отмечает Лангер.

«Мы проводили эксперименты с участием музыкантов симфонического оркестра, которые один раз исполнили произведение осознанно, а в другой раз сугубо технически. 90% слушателей, которые ничего не знали об исследовании, выбирали вариант осознанного исполнения», — рассказывает ученый.

Осознанность не ограничивается йогой и медитацией, ее можно достичь в любом деле.

«Попробуйте, к примеру, назвать пять новых фактов о человеке, с которым вы живете, или о ежедневной дороге домой. Поиски нового в том, что нам хорошо известно, заставляет нас воспринимать мир осознанно», — говорит Лангер.

«Когда вы разговариваете с кем-то и вам кажется, что вы знаете, что этот человек скажет, вы почти не слушаете его. Но как только вы признаете, что вы не знаете, ваше отношение станет совсем другим. Вам станет интересно, а любопытство — это совсем другой вид восприятия мира».

Узнав, что я профессионально пишу тексты, меня однажды спросили, часто ли мне удается пережить состояние потока. Существует стереотип, что писатели и художники могут войти в эту зону по желанию.

В течение многих лет я практиковала некоторые элементы, на которые указывает Монета, но достичь состояния, похожего на поток, мне удавалось лишь несколько раз.

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

Будут ли у меня необходимые источники? Существует ли вообще информация, которую я ищу? Не буду ли я отвлекаться? Кроме того, мысль о том, что сложность задачи должна превышать мои навыки лишь на 4% (как указано в формуле Котлера), кажется мне абсурдной.

Вместе с тем осознанность более управляема. Я могу сосредоточиться, положив телефон в ящик, когда задача становится слишком сложной, я могу остановиться и перевести дыхание.

Не уверена, что в такие моменты я вхожу в транс, но безусловно становлюсь спокойнее.

Прочитать оригинал этой статьи на английском языке вы можете на сайте BBC Capital.

Хотите поделиться с нами своими жизненными историями? Напишите о себе по адресу — [email protected], и наши журналисты с вами свяжутся.

Как состояния потоков работают в многопоточности Java?

1) Вот два вывода, которые я хочу выучить, можете ли вы их объяснить?

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

Поток может находиться в одном из следующих состояний:

НОВИНКА: В этом состоянии находится еще не запущенный поток.

RUNNABLE: В этом состоянии находится поток, выполняющийся на виртуальной машине Java.

ЗАБЛОКИРОВАНО: Поток в заблокированном состоянии ожидает блокировки монитора, чтобы ввести синхронизированный блок / метод или повторно ввести синхронизированный блок / метод после вызова Object.wait .

WAITING: В этом состоянии находится поток, который бесконечно ожидает выполнения другим потоком определенного действия.

Поток находится в состоянии ожидания из-за вызова одного из следующих методов:

  Object.wait без тайм-аута
Нить.присоединиться без тайм-аута
LockSupport.park
  

TIMED_WAITING: Поток, который ожидает, пока другой поток выполнит действие в течение указанного времени ожидания, находится в этом состоянии.

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

  Thread.sleep
Object.wait с таймаутом
Thread.join с таймаутом
LockSupport.parkNanos
LockSupport.parkUntil
  

ЗАВЕРШЕН: В этом состоянии находится завершившийся поток.

2) Зачем снова переходить в состояние ЗАБЛОКИРОВАНО? как и раньше он был в состоянии РАБОТА

Поток заблокирован в ожидании блокировки монитора в этом состоянии.

Для запросов 3 и 4: Если поток (t1) освободит блокировку, другой ожидающий поток (t2) перейдет из состояния ЗАБЛОКИРОВАНО в состояние РАБОТАЕТ . Поток t1 перейдет в состояние TERMINATED , если он завершил свое выполнение. Если t2 завершит выполнение, он перейдет в состояние TERMINATED .

5) JVM сохраняет историю каждого потока даже после того, как поток мертв? Если нет, то как JVM показывает завершенное состояние потока, который уже ушел?

Поскольку ваша программа содержит ссылку на потоки, вы получаете состояние TERMINATED для этих потоков. Если вы освободите эти ссылки, JVM не будет иметь истории этих потоков

[Switch] Анализ состояния потока определения языка Java

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

Язык Java определяет состояние в 6 одновременно, и поток имеет одно и только одно из них. Чтобы получить состояние потока Java, вы можете использовать метод getState (), определенный в классе java.lang.Thread, чтобы получить состояние текущего потока и получить его с помощью Thread.currentThread (). GetState (). Тип, возвращаемый этим методом, является перечислимым типом, который представляет собой перечисление внутри потока, которое называется «java.lang.Thread.State «. Список типов, определенных в этом перечислении, представляет собой список состояний потоков, соответствующих этому уровню языка Java. Содержит такие значения, как NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING и TERMINATED.

1. НОВАЯ (новая)

Описание НОВОГО состояния в перечислении java.lang.Thread.State:

  / **
 * Состояние потока для еще не запущенного потока.
 * /
НОВЫЙ
  

В этом состоянии находится поток, который не был запущен после создания.
означает, что этот поток не запускается функцией start () или это вообще не поток. По сути, это просто создание оболочки Java, настоящего потока пока нет. Беги.
не означает, что вызывается start (), состояние изменяется немедленно, и есть несколько шагов посередине. Если в этом процессе запуска есть другой поток для получения своего состояния, он фактически не определен. Это зависит от того, были ли выполнены эти промежуточные шаги.

2. РАБОТАЮЩИЙ (работоспособный)

Описание состояния RUNNABLE в java.lang.Thread.State перечисление:

  / **
 * Состояние потока для работающего потока. Поток в исполняемом
 * состояние выполняется на виртуальной машине Java, но может
 * ждать других ресурсов от операционной системы
 * например, процессор.
 * /
РАБОТАЮЩИЙ
  

Состояние RUNNABLE включает в себя Running и Ready в состоянии потока операционной системы, то есть поток в этом состоянии может быть запущен или может ожидать системных ресурсов, таких как ожидание, пока ЦП выделит для него временные интервалы, например ожидает, пока сетевой ввод-вывод прочитает данные.
Состояние RUNNABLE также можно понимать как поток, который ожидает запроса ЦП (возможно, что этот момент не занимает ЦП, но он может отправлять инструкции, ожидающие системного планирования). Поскольку в реальной системе после того, как поток не открыт, ЦП обслуживает только этот поток. Он должен использовать несколько алгоритмов планирования для достижения некоторого баланса, но в это время поток все еще находится в состоянии RUNNABLE.

3. ЗАБЛОКИРОВАН (блокировка)

Описание состояния ЗАБЛОКИРОВАНО в java.lang.Thread.State перечисление:

  / **
 * Состояние потока для потока, заблокированного в ожидании блокировки монитора.
 * Поток в заблокированном состоянии ожидает блокировки монитора
 * для ввода синхронизированного блока / метода или
 * повторно введите синхронизированный блок / метод после вызова
 * {@link Object # wait () Object.wait}.
 * Когда поток хочет ввести блок / метод синхронизированного оператора, он становится ЗАБЛОКИРОВАН, если не будет получена блокировка.
   * Или после вызова Object.wait () он будет разбужен функцией notify ().Когда он снова входит в блок / метод синхронизированного оператора, он становится ЗАБЛОКИРОВАН, если не будет получена блокировка.
 * /
ЗАБЛОКИРОВАНО
  

BLOCKED называется состоянием блокировки, или поток был приостановлен, он «спит», обычно потому, что он ожидает «блокировки». При попытке войти в синхронизированный блок / метод блокировка уже занята другими потоками. Он будет заблокирован до тех пор, пока другой поток не завершит критическую секцию или операцию wait () соответствующего объекта блокировки, у него есть возможность конкурировать за право входа в критическую секцию.
В коде Java необходимо учитывать степень детализации synchronized, иначе поток будет принимать блокировки в течение длительного времени, а другие потоки, конкурирующие за блокировки, будут блокироваться до тех пор, пока блокировка не освободит блокировку.
Поток в состоянии BLOCKED не может изменить свое состояние блокировки, даже если он вызывает thread.interrupt (), потому что метод interrupt () просто устанавливает состояние прерывания потока, то есть это метка, а не пробуждение заблокированного thread
Примечание. Операция RetentrantLock.lock () переходит в состояние WAITING, которое внутренне вызывает LockSupport.park () метод.

4. WAITING (бесконечное ожидание)

  / **
 * Состояние потока для ожидающего потока.
 * Поток находится в состоянии ожидания из-за вызова одного из
 * следующие методы:
 * 
    *
  • {@link Object # wait () Object.wait} без тайм-аута
  • *
  • {@link #join () Thread.join} без тайм-аута
  • *
  • {@link LockSupport # park () LockSupport.park}
  • *
* *

Поток в состоянии ожидания ожидает, пока другой поток * выполнить определенное действие.* * Например, поток, который вызвал Object.wait () * на объекте ожидает вызова другого потока * Object.notify () или Object.notifyAll () в * этот объект. Поток, вызвавший Thread.join () * ожидает завершения указанного потока. * / ОЖИДАЮЩИЙ

Потокам в этом состоянии не выделяется время выполнения ЦП, они ожидают пробуждения дисплея другими потоками.Это состояние обычно является результатом вызова соответствующего метода wait () «объекта блокировки» после того, как поток имеет блокировку объекта и входит в соответствующую область кода. Замаскированные реализации — LockSupport.park (), Thread.join () и т. Д. Они также ждут, когда произойдет другое событие, которое должно описать ожидание.

Следующий метод заставит поток ждать в неопределенном состоянии:
(1) Object.wait () без набора параметров времени ожидания
(2) Thread.join () без набора параметров времени ожидания
(3) LockSupport.park ()
примечание:
LockSupport.park (блокировщик объектов) приостановит текущий поток. Блокировщик параметров используется для установки «изменчивой переменной члена ParkBlocker текущего потока».
parkBlocker используется для записи, кто заблокирован потоком. Вы можете получить заблокированный объект через LockSupport.getBlocker () для мониторинга и анализа потока.

Разница между «блокировкой» и «ожиданием»:
(1) Состояние «блокировки» — ожидание получения монопольной блокировки.Состояние «блокировки» — пассивное. Состояние «блокировки» возникает из-за того, что другие потоки снимают блокировку. Заблокировано
(2) Состояние «ожидания» — это ожидание в течение определенного периода времени или происходит действие пробуждения. Активен переход в состояние «ожидания».
Если вы вызываете Object.wait () активно и не можете получить ReentraantLock, вызывайте LockSupport.park () активно, например, если основной поток активно вызывает subThread.join (), пусть основной поток ждет дочернего нить. Выполнить после выполнения
, выходящего из состояния ожидания, потому что другие потоки проснулись или достигли времени ожидания

5.TIMED_WAITING (ограниченное ожидание)

  / **
 * Состояние потока для ожидающего потока с указанным временем ожидания.
 * Поток находится в состоянии ожидания по времени из-за вызова одного из
 * следующие методы с заданным положительным временем ожидания:
 * 
    *
  • {@link #sleep Thread.sleep}
  • *
  • {@link Object # wait (long) Object.wait} с тайм-аутом
  • *
  • {@link #join (long) Thread.join} с тайм-аутом
  • *
  • {@link LockSupport # parkNanos LockSupport.parkNanos}
  • *
  • {@link LockSupport # parkUntil LockSupport.parkUntil}
  • *
* / TIMED_WAITING

Потокам в этом состоянии также не назначается время выполнения ЦП, но им не нужно ждать пробуждения, отображаемого другими потоками, и они будут автоматически разбужены системой через определенное время.
Следующий метод заставит поток войти в состояние ожидания крайнего срока TIMED_WAITING:
(1) Метод Thread.sleep ()
(2) Объект.wait (), который устанавливает параметр тайм-аута
(3) Установить метод Thread.join () параметра тайм-аута
(4) Метод LockSupport.parkNanos ()
(5) Метод LockSupport.parkUntil ()

6. ПРЕКРАЩЕНИЕ

  / **
 * Состояние потока для завершенного потока.
 * Поток завершил выполнение.
 * /
ПРЕКРАЩЕННЫЙ
  

Состояние потока было завершено, и поток завершил выполнение. Другими словами, метод run () завершен, и поток находится в этом состоянии.Фактически, это всего лишь состояние уровня языка Java. Соответствующий поток мог быть отключен внутри операционной системы или повторно использован для других запросов, которым необходимо использовать потоки. На уровне языка Java видно только состояние потока, видимое через код Java. Только.

При мониторинге JVM через VisualVM вы можете просмотреть информацию о потоках JVM через вкладку «Потоки». Статус потока VisualVM следующий:

Через стек потока дампа и соответствующий имени потока в информации мониторинга VisualVM стек потока каждого найденного состояния потока VisualVM выглядит следующим образом: (Обратите внимание на ключевая информация)

1, работающая

  демон "http-bio-8080-Acceptor-0" prio = 6 tid = 0x000000000d7b4800 nid = 0xa264 runnable [0x000000001197e000]
      Джава.lang.Thread.State: RUNNABLE
            в java.net.DualStackPlainSocketImpl.accept0 (собственный метод)
            в java.net.DualStackPlainSocketImpl.socketAccept (DualStackPlainSocketImpl.java:131)
            в java.net.AbstractPlainSocketImpl.accept (AbstractPlainSocketImpl.java:398)
            в java.net.PlainSocketImpl.accept (PlainSocketImpl.java:199)
            - заблокирован <0x00000000c2303850> (a java.net.SocksSocketImpl)
            в java.net.ServerSocket.implAccept (ServerSocket.java:530)
            в java.net.ServerSocket.accept (ServerSocket.java:498)
            в org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket (DefaultServerSocketFactory.java:60)
            в org.apache.tomcat.util.net.JIoEndpoint $ Acceptor.run (JIoEndpoint.java:220)
            в java.lang.Thread.run (Thread.java:745)

Заблокированные собственные синхронизаторы:
        - Никто
  

2, сон

  Демон "Druid-ConnectionPool-Destory-293325558" prio = 6 tid = 0x000000000d7ad000 nid = 0x9c94 ожидает выполнения условия [0x000000000bf0f000]
      Джава.lang.Thread.State: TIMED_WAITING (спящий)
           в java.lang.Thread.sleep (собственный метод)
            в com.alibaba.druid.pool.DruidDataSource $ DestroyConnectionThread.run (DruidDataSource.java:1685)

Заблокированные собственные синхронизаторы:
        - Никто
  

3, ожидание

  Демон "Finalizer" prio = 8 tid = 0x0000000009349000 nid = 0xa470 в Object.wait () [0x000000000a82f000]
      java.lang.Thread.State: WAITING (на мониторе объекта)
            в java.lang.Object.wait (собственный метод)
            - ожидание <0x00000000c22a0108> (файл java.lang.ref.ReferenceQueue $ Lock)
            в java.lang.ref.ReferenceQueue.remove (ReferenceQueue.java:135)

      - заблокирован <0x00000000c22a0108> (a java.lang.ref.ReferenceQueue.Lock)
            в java.lang.ref.ReferenceQueue.remove (ReferenceQueue.java:151)
            в java.lang.ref.Finalizer $ FinalizerThread.run (Finalizer.java:209)

   Заблокированные собственные синхронизаторы:
        - Никто

 

«Тайм-аут подключения к серверу JMX 45» демон prio = 6 tid = 0x000000000e846000 nid = 0xab10 в Object.wait () [0x00000000137df000]
      Джава.lang.Thread.State: TIMED_WAITING (на мониторе объекта)
            в java.lang.Object.wait (собственный метод)
           - ожидание на <0x00000000c55da3f0> (a [I)
            в com.sun.jmx.remote.internal.ServerCommunicatorAdmin $ Timeout.run (ServerCommunicatorAdmin.java:168)
            - заблокировано <0x00000000c55da3f0> (a [I)
            в java.lang.Thread.run (Thread.java:745)

   Заблокированные собственные синхронизаторы:
         - Никто
  

4, жительница

  «http-bio-8080-exec-2» демон prio = 6 tid = 0x000000000d7b8000 nid = 0x9264 ожидание по условию [0x000000000ee4e000]
      Джава.lang.Thread.State: WAITING (парковка)
            в sun.misc.Unsafe.park (собственный метод)
           - парковка для ожидания <0x00000000c5629bc8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject)
            в java.util.concurrent.locks.LockSupport.park (LockSupport.java:186)
            в java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject.await (AbstractQueuedSynchronizer.java:2043)
            в java.util.concurrent.LinkedBlockingQueue.take (LinkedBlockingQueue.java: 442)
            в org.apache.tomcat.util.threads.TaskQueue.take (TaskQueue.java:104)
            в org.apache.tomcat.util.threads.TaskQueue.take (TaskQueue.java:32)
            в java.util.concurrent.ThreadPoolExecutor.getTask (ThreadPoolExecutor.java:1068)
            в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1130)
            в java.util.concurrent.ThreadPoolExecutor.Worker.run (ThreadPoolExecutor.java:615)
            в org.apache.tomcat.util.threads.TaskThread.WrappingRunnable.run (TaskThread.java:61)
            в java.lang.Thread.run (Thread.java:745)

   Заблокированные собственные синхронизаторы:
        - Никто


"pool-9-thread-1" prio = 6 tid = 0x000000000d7b2000 nid = 0xd5fc ожидание по условию [0x000000001187e000]
       java.lang.Thread.State: TIMED_WAITING (парковка)
             в sun.misc.Unsafe.park (собственный метод)
             - парковка для ожидания <0x00000000c563b9e0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject)
             в java.util.concurrent.locks.LockSupport.parkNanos (LockSupport.java:226)
             в java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject.awaitNanos (AbstractQueuedSynchronizer.java:2082)
             в java.util.concurrent.ScheduledThreadPoolExecutor.DelayedWorkQueue.take (ScheduledThreadPoolExecutor.java:1090)
             в java.util.concurrent.ScheduledThreadPoolExecutor.DelayedWorkQueue.take (ScheduledThreadPoolExecutor.java:807)
             в java.util.concurrent.ThreadPoolExecutor.getTask (ThreadPoolExecutor.java:1068)
             в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1130)
             в java.util.concurrent.ThreadPoolExecutor.Worker.run (ThreadPoolExecutor.java:615)
             в java.lang.Thread.run (Thread.java:745)

   Заблокированные собственные синхронизаторы:
       - Никто
  

5, мониторинг

  "Thread-1" prio = 6 tid = 0x000000000a8a1800 nid = 0xfdb4 ожидание записи монитора [0x000000000b4de000]
      java.lang.Thread.State: ЗАБЛОКИРОВАНО (на мониторе объекта)
            в com.jy.modules.test.Test2 $ T.run (Test2.java:58)
           - ожидание блокировки <0x00000000eab757e0> (объект java.lang.Object)

Заблокированные собственные синхронизаторы:
      - Никто
  

Сводка взаимосвязи между «состоянием потока мониторинга потока VisualVM» и «состоянием потока Java»:

Можно видеть, что состояние потока VisualVM сделало два состояния «WAITING» и «TIMED_WAITING» уточненными в соответствии с причина состояния отключения (на самом деле дамп стека потоков java был доработан.)
Причиной статуса «TIMED_WAITING» может быть:
Thread.sleep () — Sleep
Object.wait (timeout) — wait
LockSupport.parkUntil (deadline) — резидент

Справочные материалы:
«Углубленное понимание виртуальной машины Java»
«Спецназ Java» 5.1 Базовое введение

Объяснение

состояний потоков | Сообщество Jaspersoft

Введение

BLOCKED, WAITING и TIMED_WAITING являются важными состояниями потока, но часто сбивают с толку многих из нас.Чтобы анализировать дамп потоков, нужно хорошо понимать и то, и другое. Используя реальные примеры, в этой статье каждое состояние разбивается на более простые термины.

Любые сбивающие с толку концепции можно легко понять с помощью примеров, а не формальных определений, приведенных в документации Java. Если это примеры из реальной жизни, это может быть еще более интересным. Я хотел бы поделиться некоторыми примерами из реальной жизни, которые могут помочь понять эти состояния потоков.

Рис. Переходный график, созданный http: // fastthread.io / показывает, какие потоки какие потоки блокируют


ЗАБЛОКИРОВАНО

Документ

Java формально определяет состояние BLOCKED как: «Поток, который заблокирован в ожидании блокировки монитора, находится в этом состоянии».

Пример из жизни: сегодня вы идете на собеседование. Это работа вашей мечты, к которой вы стремитесь последние несколько лет. Вы проснулись рано утром, собрались, облачились в свой лучший наряд, остро выглядели перед зеркалом. Теперь вы выходите в свой гараж и понимаете, что ваша жена уже забрала машину.В этом сценарии у вас только одна машина, что же произойдет? В реальной жизни может случиться драка. Однако вы ЗАБЛОКИРОВАНЫ, потому что ваша жена уже взяла машину. Ты не сможешь пойти на собеседование.

Это состояние ЗАБЛОКИРОВАНО. Говоря техническим языком, вы — поток T1, ваша жена — поток T2, а замок — это машина. Т1 ЗАБЛОКИРОВАН на замке (т. Е. На автомобиле), потому что Т2 уже приобрел этот замок.

Titbit: поток переходит в состояние BLOCKED, когда он ожидает блокировки монитора для входа в синхронизированный блок / метод или повторно входит в синхронизированный блок / метод после вызова метода Object # wait ().


ОЖИДАНИЕ

Документ

Java формально определяет состояние WAITING как: «Поток, который бесконечно ожидает, пока другой поток выполнит определенное действие, находится в этом состоянии».

Пример из жизни: допустим, через несколько минут ваша жена возвращается домой на машине. Теперь вы понимаете, что приближается время собеседования, и до него нужно ехать далеко. Итак, вы выкладываете всю мощь на педаль газа в машине. Вы едете со скоростью 100 миль в час, когда разрешенное ограничение скорости составляет всего 60 миль в час.Вам повезло, гаишник видит, что вы превышаете установленную скорость, и тянет вас к обочине. Теперь вы входите в состояние ОЖИДАНИЕ, друг мой. Вы перестаете водить машину и сидите без дела в машине, пока полицейский вас не расследует, а затем отпустит. По сути, пока он вас не отпустит, вы застряли в состоянии WAITING.

Если говорить технически, то вы — поток T1, а коп — это поток T2. Вы сняли блокировку (т.е. вы перестали управлять автомобилем) и перешли в состояние ОЖИДАНИЕ.Пока полицейский (то есть Т2) не отпустит вас, вы застрянете в этом состоянии ОЖИДАНИЯ.

Titbit: поток переходит в состояние WAITING, когда он вызывает один из следующих методов:

  1. Объект # wait () без тайм-аута
  2. Поток # join () без тайм-аута
  3. LockSupport # парк ()

Поток, который вызвал Object.wait () для объекта, находится в состоянии WAITING, пока другой поток не вызовет Object.notify () или Object.notifyAll () для этого объекта. Поток, который вызвал Thread.join () находится в состоянии ОЖИДАНИЯ для завершения указанного потока.


ВРЕМЯ_ОЖИДАНИЕ

Документ

Java формально определяет состояние TIMED_WAITING как: «Поток, который ожидает, пока другой поток выполнит действие в течение указанного времени ожидания, находится в этом состоянии».

Пример из реальной жизни: Несмотря на всю драму, вы очень хорошо прошли собеседование, произвели на всех впечатление и получили эту высокооплачиваемую работу. (Поздравляю!) Вы возвращаетесь домой и рассказываете своему соседу об этой новой работе и о том, как вы ей рады.Ваш друг говорит, что он тоже работает в том же офисном здании. Он предлагает, чтобы вы двое поехали вместе. Ты думаешь, это отличная идея. Итак, в первый день работы вы идете к нему домой. Вы останавливаете машину перед его домом. Вы ждете 10 минут, но ваш сосед все еще не выходит. Вы едете вперед и едете на работу, потому что не хотите, чтобы в первый же день задерживался. Теперь это TIMED_WAITING.

Если говорить технически, вы — поток T1, а ваш сосед — поток T2.Вы отпускаете блокировку (т.е. прекращаете движение) и ждете до 10 минут. Если ваш сосед, Т2, не выезжает через 10 минут, вы снова начинаете водить машину.

Titbit: поток переходит в состояние TIMED_WAITING, когда он вызывает один из следующих методов:

  1. Поток # сна ()
  2. Объект # wait () с тайм-аутом
  3. Поток # join () с тайм-аутом
  4. LockSupport # parkNanos ()
  5. LockSupport # parkUntil ()

Заключение

Когда кто-то анализирует дампы потоков, понимание этих различных состояний потоков имеет решающее значение.Сколько потоков находится в состояниях RUNNABLE, BLOCKED, WAITING и TIMED_WATING? Какие темы заблокированы? Кто их блокирует? Какой объект использовался для блокировки? Это некоторые из важных показателей, которые следует анализировать в дампах потоков. Подобные подробные анализы дампа резьбы можно легко выполнить с помощью онлайн-инструмента, такого как http://fastthread.io/

состояний потока в Java. Поток на Java в любой момент времени… | Равиду Перера

«Гораздо проще спроектировать класс для обеспечения потоковой безопасности, чем модифицировать его позже для обеспечения безопасности потоков.”

Брайан Гетц

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

В параллельном программировании потоки Java играют важную роль. Поток Java должен быть в любой точке следующих состояний в любое время существования. В любой момент поток находится только в одном из следующих состояний.

Жизненный цикл потока

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

1. Новый

Когда создается новый поток, он будет в состоянии «Новый», и поток еще не запущен.Когда поток находится в состоянии New, его код еще не запущен и не начал выполняться.

Пример: новый поток создается, но не запускается. Оставляя его таким образом,

Объект потока пуст, а ресурсы для потока недоступны. Если пользователь вызвал любой другой метод, кроме start (), произойдет ошибка IllegalThreadStateExecption.

2. Выполнение

Готовый к запуску поток переводится в состояние выполнения.

В этом состоянии поток может быть запущен или готовится к запуску в любой момент времени.Планировщик потоков отвечает за предоставление времени для запуска потока. В большинстве операционных систем каждому потоку отводится небольшое количество процессорного времени. Когда это происходит, все такие потоки, которые готовы к запуску, ожидают ЦП, и текущий запущенный поток находится в состоянии выполнения.

3. Заблокирован

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

Например, когда поток ожидает завершения ввода-вывода, он находится в заблокированном состоянии. Планировщик потоков несет ответственность за повторную активацию и планирование заблокированного / ожидающего потока. Поток в этом состоянии не может продолжать свое выполнение, пока он не будет переведен в рабочее состояние. Ни один поток в этих состояниях не потребляет цикл процессора.

4. Ожидание

Ожидание потока с помощью FastThread

Когда поток находится в состоянии ожидания, когда он ожидает другого потока по условию.Когда это условие выполнено, планировщик уведомляется (когда вызываются методы notify (), или notifyAll () ), и ожидающий поток переводится в рабочее состояние.

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

5. Ожидание времени

Поток находится в рабочем состоянии, а затем он вызывает метод sleep (t) , wait (t) или join (t) с продолжительностью времени в качестве параметра, который перемещает поток к состоянию ожидания времени.Поток находится в этом состоянии, пока не истечет время ожидания или пока не будет получено уведомление. Например, когда поток вызывает спящий режим или условное ожидание, он переводится в состояние ожидания по времени. Когда время истечет, поток вернется в рабочее состояние.

6. Завершение

Поток завершается по любой из следующих причин.

· Резьба существует нормально. Это происходит, когда код потока полностью выполняется программой.

· Когда в потоке произошло какое-то необычное ошибочное событие, такое как ошибка сегментации или необработанное исключение.

различных состояний потоков Java | Специалисты по Java Code

Введение

В Java потоки могут иметь состояния. Перечисление Thread.State определяет различные состояния, которые может иметь поток Java. Это перечисление определяет следующие значения —

  1. NEW
  2. RUNNABLE
  3. BLOCKED
  4. WAITING
  5. TIMED_WAITING
  6. TERMINATED

В следующих разделах я предоставлю краткий обзор этих состояний вместе с возможными переходами между ними.

Состояния потока Java

NEW

Это состояние по умолчанию, которое получает поток при первом создании.

RUNNABLE

Как только поток начинает выполняться, он переходит в состояние RUNNABLE. Обратите внимание, что поток, ожидающий получения ЦП для выполнения, все еще находится в этом состоянии.

ЗАБЛОКИРОВАН

Поток переходит в состояние ЗАБЛОКИРОВАНО, как только он блокируется в ожидании блокировки монитора. Это может произойти одним из следующих двух способов —

  1. Ожидание получения блокировки для входа в синхронизированный блок / метод.
  2. Ожидается повторное получение блокировки монитора объекта, для которого был вызван метод Object.wait.
WAITING

Поток переходит в это состояние в результате вызова одного из следующих методов —

  1. Object.wait без таймаута
  2. Thread.join без тайм-аута
  3. LockSupport.park
TIMED_WITING
TIMED_W

Поток переходит в это состояние в результате вызова одного из следующих методов —

  1. Thread.sleep
  2. Object.wait с таймаутом
  3. Thread.join с таймаутом
  4. LockSupport.parkNanos
  5. LockSupport.parkUntil
TERMINATED

Как только поток завершается, он переходит в это состояние.

Возможные переходы между состояниями

На следующей диаграмме показаны возможные переходы между различными состояниями —

Как только поток становится запланированным для выполнения, он переходит в состояние RUNNABLE. Этот переход показан первой стрелкой (обозначенной цифрой 1).

Из состояния RUNNABLE поток может перейти в любое из состояний BLOCKED, WAITING, TIMED_WAITING или TERMINATED. Теоретически, если поток не ожидает получения какой-либо блокировки, или не спит, или не вызывает никаких методов, которые заставляют его ждать, он просто завершает свое выполнение и напрямую переходит в состояние TERMINATED (обозначено как 2d).

Конечно, на практике такой сценарий маловероятен. Часто поток пытается получить блокировку, и в этом случае он переходит в состояние ЗАБЛОКИРОВАНО (помечено как 2a), если ему нужно дождаться блокировки.Потоки также явно ожидают выполнения некоторых предварительных условий / действий от других потоков, и в этом случае они переходят в состояние WAITING (обозначено как 2b) или TIMED_WAITING (отмечено как 2c), в зависимости от того, было ли время ожидания рассчитано или нет.

Когда поток переходит в состояние ЗАБЛОКИРОВАНО, единственно возможный переход, который разрешен следующим, — это переход в состояние RUNNABLE (помечено как 3d).

Аналогично, единственный возможный переход из состояния WAITING — это переход в состояние ЗАБЛОКИРОВАНО (обозначено как 3c).

Обратите внимание, что некоторые статьи в Интернете неправильно добавляют переход из состояния WAITING в состояние RUNNABLE. Это просто неправильно. Поток никогда не может напрямую перейти в состояние RUNNABLE из состояния WAITING. Мы можем понять причину этого на примере.

Предположим, что у нас есть поток T, который в настоящее время находится в состоянии RUNNABLE и удерживает блокировку монитора трех объектов a, b и c, как показано на диаграмме ниже —

В этот момент T вызывает c.wait (), после чего он больше не удерживает блокировку монитора объекта c —

Как только T получает уведомление с помощью вызова notify / notifyAll, он прекращает ожидание и конкурирует с другими потоками (скажем, X и Y), чтобы получить блокировку монитора c —

, которая, согласно определениям выше, находится в состоянии ЗАБЛОКИРОВАНО. Только после получения блокировки монитора c, T переходит в состояние RUNNABLE. Аналогичные рассуждения можно применить к Thread.join () (который внутренне использует Object.wait ()) и LockSupport.парк().

Вернемся к нашей исходной диаграмме переходов между состояниями. Как мы видим, поток может перейти в состояние RUNNABLE (обозначено как 3b) или в состояние BLOCKED (обозначено как 3a) из состояния TIMED_WAITING. В этом случае возможен переход к RUNNABLE, потому что поток может войти в состояние TIMED_WAITING после вызова метода Thread.sleep, и в этом случае он сохраняет все блокировки монитора, которые он удерживает в настоящее время.

Когда поток завершает выполнение после перехода между состояниями RUNNABLE, BLOCKED, WAITING или TIMED_WAITING, он раз и навсегда переходит в состояние TERMINATED.

Как нам узнать текущее состояние потока?

Мы можем использовать метод Thread.getState () для получения текущего состояния потока. Мы можем использовать это значение для отслеживания или отладки любых проблем параллелизма, с которыми наше приложение может столкнуться в производственной среде.

Заключение

В этой статье мы кратко рассмотрели различные состояния, которые может иметь поток Java, и то, как поток перемещается между этими состояниями. Как всегда, мы будем благодарны за любые отзывы / предложения / комментарии по улучшению!

Опубликовано на Java Code Geeks с разрешения Сайема Ахмеда, партнера нашей программы JCG.См. Исходную статью здесь: Различные состояния потоков Java

Мнения, выраженные разработчиками Java Code Geeks, являются их собственными.

Жизненный цикл потока в Java | Состояние потока

Жизненный цикл потока в Java — это в основном переходы между состояниями потока, которые начинаются с момента его рождения и заканчиваются после его смерти.

Когда экземпляр потока создается и выполняется путем вызова метода start () класса Thread , поток переходит в рабочее состояние.

Когда класс Thread вызывает метод sleep () или wait (), поток переходит в неработающее состояние.

Из неработающего состояния поток возвращается в работоспособное состояние и продолжает выполнение операторов. Когда поток выходит из метода run (), он умирает. Эти переходы между состояниями потока называются жизненным циклом потока в Java .

Для работы с потоками в программе важно идентифицировать состояние потока. Так. давайте разберемся, как определять состояния потока в жизненном цикле потока Java.

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


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

1. Новый

2. Работоспособен

3. Работает

4. Заблокирован (неработающее состояние)

5. Мертвый

1. New (Newborn State): Когда мы создаем объект потока с использованием класса Thread, создается поток, который, как известно, находится в состоянии Newborn.То есть, когда поток создается, он переходит в новое состояние, но метод start () еще не был вызван для экземпляра.

Другими словами, объект Thread существует, но он не может выполнить никакой оператор, потому что это не выполнение потока. В новом потоке можно вызвать только метод start (); в противном случае будет выброшено исключение IllegalThreadStateException .

2. Состояние выполнения: Состояние выполнения означает, что поток готов к выполнению. Когда метод start () вызывается в новом потоке, поток переходит в рабочее состояние.

В рабочем состоянии поток готов к выполнению и ожидает доступности процессора (процессорного времени). То есть поток присоединился к очереди (строке) потоков, ожидающих выполнения.

Если все потоки имеют одинаковый приоритет, ЦП выделяет временные интервалы для выполнения потоков по принципу «первым пришел — первым обслужен». Процесс распределения времени между потоками известен как квантование времени . Поток может перейти в рабочее состояние из состояния выполнения, ожидания или нового состояния.

3. Состояние выполнения: Запуск означает, что процессор (ЦП) выделил потоку временной интервал для его выполнения. Когда планировщик потоков выбирает поток из состояния выполнения для выполнения, он переходит в состояние выполнения. Посмотрите на рисунок выше.

В рабочем состоянии процессор отдает время потоку для выполнения и выполняет свой метод выполнения. Это состояние, в котором поток выполняет свои фактические функции. Поток может перейти в состояние выполнения только из состояния выполнения.

Работающий поток может отказаться от управления в любой из следующих ситуаций и перейти в заблокированное состояние.

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

2. Когда поток приостанавливается с использованием метода suspend () на некоторое время для выполнения некоторых условий.Приостановленный поток можно оживить с помощью метода resume ().

3. Когда в потоке вызывается метод wait () для ожидания в течение некоторого времени. Поток в состоянии ожидания можно запустить снова с помощью метода notify () или notifyAll ().

4. Заблокированное состояние: Считается, что поток находится в заблокированном состоянии, когда он приостановлен, спит или ожидает в течение некоторого времени для удовлетворения некоторого условия.

5. Мертвое состояние: Поток умирает или переходит в мертвое состояние автоматически, когда его метод run () завершает выполнение операторов.То есть поток завершается или мертв, когда поток выходит из метода run (). Поток также может быть мертвым при вызове метода stop ().

Заключительные слова

В течение жизненного цикла потока в Java поток перемещается из одного состояния в другое различными способами. Это связано с тем, что в многопоточной среде, когда выполняется несколько потоков, только один поток может использовать ЦП одновременно.

Все остальные потоки находятся в некоторых других состояниях, либо ожидая своего включения ЦП, либо ожидая выполнения некоторых условий.Следовательно, поток всегда находится в любом из пяти состояний.
Спасибо за чтение !!!
Далее ⇒ Создание нескольких потоков в Java ⇐ Назад Далее ⇒

threading — Потоковый параллелизм — документация Python 3.9.6

Исходный код: Lib / threading.py


Этот модуль конструирует высокоуровневые поточные интерфейсы поверх нижнего
уровень _thread модуль. См. Также модуль очереди .

Изменено в версии 3.7: Этот модуль раньше был необязательным, теперь он всегда доступен.

Примечание

Хотя они не перечислены ниже, имена camelCase , используемые для некоторых
методы и функции в этом модуле из серии Python 2.x по-прежнему
поддерживается этим модулем.

Детали реализации CPython: В CPython из-за глобальной блокировки интерпретатора только один поток
может выполнять код Python сразу (даже если некоторые ориентированные на производительность
библиотеки могут преодолеть это ограничение).Если вы хотите, чтобы ваше приложение лучше использовало вычислительные
ресурсы многоядерных машин рекомендуется использовать
multiprocessing или concurrent.futures.ProcessPoolExecutor .
Однако многопоточность по-прежнему является подходящей моделью, если вы хотите запустить
несколько задач, связанных с вводом-выводом одновременно.

Этот модуль определяет следующие функции:

нарезание резьбы. active_count ()

Возвращает количество активных объектов Thread .Вернувшийся
count равно длине списка, возвращаемого функцией enumerate () .

нарезание резьбы. текущая резьба ()

Вернуть текущий объект Thread , соответствующий потоку вызывающего
контроля. Если поток управления вызывающего абонента не был создан через
threading Модуль , фиктивный объект потока с ограниченной функциональностью
вернулся.

нарезание резьбы. за исключением крючка ( аргументов , /)

Обрабатывать неперехваченное исключение, вызванное Thread.run () .

Аргумент args имеет следующие атрибуты:

  • exc_type : Тип исключения.

  • exc_value : значение исключения, может быть Нет .

  • exc_traceback : Отслеживание исключения, может быть Нет .

  • поток : поток, вызвавший исключение, может быть Нет .

Если exc_type SystemExit , исключение автоматически игнорируется.
В противном случае исключение распечатывается на sys.stderr .

Если эта функция вызывает исключение, вызывается sys.excepthook () для
справиться.

threading.excepthook () можно переопределить, чтобы контролировать, насколько неперехваченным
обрабатываются исключения, вызванные Thread.run () .

Сохранение exc_value с использованием настраиваемого обработчика может создать ссылочный цикл.Это
должен быть очищен явно, чтобы прервать контрольный цикл, когда
исключение больше не нужно.

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

нарезание резьбы. get_ident ()

Вернуть «идентификатор потока» текущего потока. Это ненулевой
целое число.Его значение не имеет прямого значения; он задуман как волшебное печенье
для использования, например, для индексации словаря данных, относящихся к конкретному потоку. Нить
идентификаторы могут быть переработаны, когда поток завершается, а другой поток
созданный.

нарезание резьбы. get_native_id ()

Возвращает собственный интегральный идентификатор потока текущего потока, назначенного ядром.
Это целое неотрицательное число.
Его значение может использоваться для однозначной идентификации этого конкретного потока в масштабе всей системы.
(пока поток не завершится, после чего значение может быть переработано ОС).

Доступность: Windows, FreeBSD, Linux, macOS, OpenBSD, NetBSD, AIX.

нарезание резьбы. перечислить ()

Вернуть список всех активных в настоящее время объектов Thread . Список
включает демонические потоки и объекты фиктивных потоков, созданные
current_thread () . Исключает завершенные потоки и потоки
которые еще не начались. Однако основной поток всегда является частью
результата, даже после прекращения.

нарезание резьбы. main_thread ()

Вернуть основной объект Thread . В нормальных условиях
основной поток — это поток, из которого интерпретатор Python был
начал.

нарезание резьбы. settrace ( функция )

Установите функцию трассировки для всех потоков, запущенных из модуля threading .
func будет передан в sys.settrace () для каждого потока перед его
run () вызывается метод .

нарезание резьбы. setprofile ( func )

Установите функцию профиля для всех потоков, запускаемых из модуля нарезания резьбы .
func будет передан в sys.setprofile () для каждого потока, прежде чем его
run () вызывается метод .

нарезание резьбы. размер_стека ([ размер ])

Возвращает размер стека потоков, используемый при создании новых потоков.Необязательный
Размер Аргумент определяет размер стека, который будет использоваться для последующего создания
потоков и должен быть 0 (использовать платформу или настроен по умолчанию) или положительный
целочисленное значение не менее 32 768 (32 КБ). Если размер не указан,
0 используется. Если изменение размера стека потоков
неподдерживаемый, возникает ошибка RuntimeError . Если указанный размер стека
недопустимый, возникает ValueError и размер стека не изменяется. 32 КБ
в настоящее время является минимальным поддерживаемым значением размера стека, чтобы гарантировать достаточное
пространство стека для самого интерпретатора.Обратите внимание, что некоторые платформы могут иметь
особые ограничения на значения размера стека, такие как требование
минимальный размер стека> 32 КиБ или требуется выделение в количестве, кратном системе
размер страницы памяти — дополнительную информацию см. в документации по платформе.
информации (обычно страницы 4 КиБ; использование кратного 4096 размера стека
предлагаемый подход при отсутствии более конкретной информации).

Доступность: Windows, системы с потоками POSIX.

Этот модуль также определяет следующую константу:

нарезание резьбы. TIMEOUT_MAX

Максимальное допустимое значение для параметра тайм-аута функций блокировки
( Lock.acquire () , RLock.acquire () , Condition.wait () и т. Д.).
Указание тайм-аута больше этого значения вызовет
Ошибка переполнения .

Этот модуль определяет ряд классов, которые подробно описаны в разделах
ниже.

Дизайн этого модуля частично основан на потоковой модели Java.Однако,
где Java делает блокировки и условные переменные основным поведением каждого объекта,
в Python они являются отдельными объектами. Класс Python Thread поддерживает
подмножество поведения Java-класса Thread; в настоящее время нет
приоритеты, нет групп потоков, и потоки не могут быть уничтожены, остановлены,
приостановлено, возобновлено или прервано. Статические методы класса Thread Java,
при реализации отображаются в функции уровня модуля.

Все методы, описанные ниже, выполняются автоматически.

Локальные данные потока

Локальные данные потока — это данные, значения которых зависят от потока. Справляться
локальных данных потока, просто создайте экземпляр local (или
подкласс) и сохраните на нем атрибуты:

 mydata = threading.local ()
mydata.x = 1
 

Значения экземпляра будут разными для разных потоков.

класс нарезание резьбы. местный

Класс, представляющий локальные данные потока.

Для получения дополнительных сведений и подробных примеров см. Строку документации
_threading_local модуль.

Объекты резьбы

Класс Thread представляет действие, которое выполняется в отдельном
поток управления. Есть два способа указать действие: передавая
вызываемый объект в конструктор, или переопределив run ()
метод в подклассе. Никаких других методов (кроме конструктора) быть не должно.
переопределено в подклассе.Другими словами, только переопределяют
__init __ () и run () методы этого класса.

После создания объекта потока его активность должна быть запущена путем вызова
метод потока start () . Это вызывает run ()
метод в отдельном потоке управления.

Как только активность потока запущена, он считается «живым». Это
перестает быть живым, когда его метод run () завершается — либо
обычно или вызывая необработанное исключение. is_alive ()
проверяет, жив ли поток.

Другие потоки могут вызывать метод join () потока. Это блокирует
вызывающий поток до тех пор, пока поток, чей метод join () не будет
вызов прекращен.

У потока есть имя. Имя можно передать конструктору и прочитать или
изменяется с помощью атрибута name .

Если метод run () вызывает исключение,
threading.excepthook () вызывается для его обработки.По умолчанию,
threading.excepthook () молча игнорирует SystemExit .

Поток можно пометить как «поток демона». Значение этого флага
что вся программа Python завершается, когда остаются только потоки демона. В
начальное значение наследуется от создающего потока. Флаг можно установить
через свойство демона или конструктор демона
аргумент.

Примечание

Потоки демона внезапно останавливаются при завершении работы.Их ресурсы (такие
так как открытые файлы, транзакции базы данных и т. д.) могут быть выпущены некорректно.
Если вы хотите, чтобы ваши потоки корректно останавливались, сделайте их недемоническими и
используйте подходящий механизм сигнализации, такой как событие .

Есть объект «основной поток»; это соответствует начальному потоку
управление в программе Python. Это не поток демона.

Существует вероятность создания «фиктивных объектов потока». Эти
объекты потока, соответствующие «чужеродным потокам», которые являются потоками управления
запущен вне модуля потоковой передачи, например, непосредственно из кода C.Дурачок
объекты потока имеют ограниченную функциональность; они всегда считаются живыми и
демонический, и не может быть join () ed. Они никогда не удаляются,
так как невозможно обнаружить завершение чужих потоков.

класс нарезание резьбы. Thread ( group = None , target = None , name = None , args = () , kwargs = {} , * , daemon = None )

Этот конструктор всегда должен вызываться с ключевыми аргументами.Аргументы
являются:

группа должна быть Нет ; зарезервировано для будущего продления, когда
ThreadGroup Реализован класс .

target - это вызываемый объект, который должен быть вызван методом run () .
По умолчанию Нет , что означает, что ничего не вызывается.

имя - имя потока. По умолчанию уникальное имя создается из
сформируйте «Thread- N », где N - небольшое десятичное число.

args - это кортеж аргументов для целевого вызова. По умолчанию () .

kwargs - словарь аргументов ключевого слова для целевого вызова.
По умолчанию {} .

Если не Нет , демон явно устанавливает, является ли поток демоническим.
Если Нет (по умолчанию), демоническое свойство наследуется от
текущий поток.

Если подкласс переопределяет конструктор, он должен обязательно вызвать
конструктор базового класса ( Thread.__init __ () ), прежде чем делать что-либо еще для
нить.

Изменено в версии 3.3: Добавлен аргумент демона .

начало ()

Запустить активность потока.

Он должен вызываться не более одного раза для каждого объекта потока. Он организует
метод объекта run () , который будет вызываться в отдельном потоке
контроля.

Этот метод вызовет ошибку RuntimeError , если вызывается более одного раза
на том же объекте потока.

пробег ()

Метод, представляющий активность потока.

Вы можете переопределить этот метод в подклассе. Стандартный ход ()
вызывает вызываемый объект, переданный конструктору объекта как
аргумент цели , если таковой имеется, с принятыми позиционными аргументами и аргументами ключевого слова
из аргументов args и kwargs соответственно.

присоединиться к ( тайм-аут = нет )

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

Если присутствует аргумент тайм-аут , а не Нет , это должен быть
число с плавающей запятой, определяющее тайм-аут для операции в секундах
(или их части). Поскольку join () всегда возвращает Нет ,
вы должны вызвать is_alive () после join () к
решить, произошел ли тайм-аут - если поток все еще жив,
join () Время ожидания вызова истекло.

Если аргумент тайм-аут отсутствует или Нет , операция будет
блокировать, пока поток не завершится.

Поток может быть join () ed много раз.

join () вызывает RuntimeError , если предпринята попытка
чтобы присоединиться к текущему потоку, поскольку это приведет к тупиковой ситуации. Это также
ошибка join () поток до его запуска
и попытки сделать это вызывают то же исключение.

название

Строка, используемая только для идентификации.У него нет семантики.
Несколько потоков могут иметь одно и то же имя. Начальное название задается
конструктор.

getName ()
setName ()

Старый API геттера / сеттера для name ; использовать его непосредственно как
свойство вместо этого.

идент.

«Идентификатор потока» этого потока или Нет , если поток не имеет
было начато. Это ненулевое целое число.См. get_ident ()
функция. Идентификаторы потока могут быть повторно использованы при выходе из потока и
создается другой поток. Идентификатор доступен даже после
поток завершился.

native_id

Собственный интегральный идентификатор потока этого потока.
Это неотрицательное целое число или Нет , если поток не
было начато. См. Функцию get_native_id () .
Это представляет собой идентификатор потока ( TID ), присвоенный
поток ОС (ядром).Его значение может использоваться для однозначной идентификации
этот конкретный поток общесистемный (пока поток не завершится,
после чего значение может быть переработано ОС).

Примечание

Подобно идентификаторам процессов, идентификаторы потоков действительны (гарантированно уникальны.
общесистемный) с момента создания потока до
был прекращен.

Доступность: требуется функция get_native_id () .

is_alive ()

Вернуть, активен ли поток.

Этот метод возвращает True непосредственно перед методом run ()
запускается до тех пор, пока не завершится метод run () . В
Функция модуля enumerate () возвращает список всех активных потоков.

демон

Логическое значение, указывающее, является ли этот поток потоком демона (True)
или нет (Ложь). Это должно быть установлено до вызова start () ,
в противном случае возникает RuntimeError .Его начальное значение наследуется
из создающей нити; основной поток не является потоком демона и
поэтому все потоки, созданные в основном потоке, по умолчанию
демон = Ложь .

Вся программа Python завершается, когда не остается никаких живых потоков, не являющихся демонами.

isDaemon ()
Набор Daemon ()

Старый API получения и установки для daemon ; использовать его непосредственно как
свойство вместо этого.

Заблокировать объекты

Примитивная блокировка - это примитив синхронизации, который не принадлежит
конкретный поток, когда он заблокирован. В Python в настоящее время это самый низкий уровень
доступен примитив синхронизации, реализуемый непосредственно _thread
модуль расширения.

Простая блокировка находится в одном из двух состояний: «заблокировано» или «разблокировано». Он создан
в разблокированном состоянии. Он имеет два основных метода: accept (), и
Выпуск () .Когда состояние разблокировано, получить ()
изменяет состояние на заблокированное и немедленно возвращается. Когда состояние заблокировано,
accept () блокируется до вызова release () в другом
поток изменяет его на разблокированный, затем вызов acqu () сбрасывает его
заблокирован и возвращается. Метод release () должен быть
вызывается в заблокированном состоянии; он меняет состояние на разблокировано и возвращает
немедленно. Если предпринята попытка разблокировать разблокированный замок,
RuntimeError будет возбуждено.

Блокировки

также поддерживают протокол управления контекстом.

Когда более одного потока заблокировано в acqu () в ожидании
состояние, чтобы превратиться в разблокированное, только один поток продолжается, когда выпуск ()
вызов сбрасывает состояние до разблокированного; какой из ожидающих потоков продолжается
не определен и может отличаться в зависимости от реализации.

Все методы выполняются атомарно.

класс нарезание резьбы. Замок

Класс, реализующий примитивные объекты блокировки.Как только поток получил
блокировка, последующие попытки получить ее блокируют, пока она не будет снята; любой
поток может освободить его.

Обратите внимание, что Lock на самом деле является заводской функцией, которая возвращает экземпляр
наиболее эффективной версии поддерживаемого конкретного класса Lock
у платформы.

получить ( блокировка = Истина , тайм-аут = -1 )

Получите блокировку, блокирующую или неблокирующую.

При вызове с блокирующим аргументом задано значение Истина (по умолчанию),
блокировать, пока блокировка не будет разблокирована, затем установите для него значение заблокировано и верните True .

При вызове с параметром , блокирующим аргумент , установленным в Ложь , не блокировать.
Если вызов с блокировкой установлен на Истина будет заблокирован, вернет Ложь
немедленно; в противном случае установите блокировку на заблокированный и верните True .

При вызове с плавающей точкой тайм-аут аргумент установлен в положительное значение
значение, блокируется максимум на количество секунд, указанное в тайм-ауте
и пока блокировка не может быть получена. тайм-аут аргумент -1
указывает неограниченное ожидание. Запрещено указывать таймаут
когда блокирует ложно.

Возвращаемое значение - Истина , если блокировка установлена ​​успешно,
Ложь , если нет (например, если истекло время ожидания ).

Изменено в версии 3.2: Новый параметр тайм-аут .

Изменено в версии 3.2: Получение блокировки теперь может прерываться сигналами POSIX, если
базовая реализация потоковой передачи поддерживает его.

выпуск ()

Разблокируйте фиксатор. Это может быть вызвано из любого потока, а не только из потока
который приобрел замок.

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

При вызове разблокированной блокировки возникает RuntimeError .

Нет возвращаемого значения.

заблокировано ()

Вернуть истину, если блокировка получена.

Объекты RLock

Повторяющаяся блокировка - это примитив синхронизации, который может быть получен несколько раз.
раз по той же теме. Внутри он использует концепцию «владения потоком».
и «уровень рекурсии» в дополнение к заблокированному / разблокированному состоянию, используемому примитивом
замки. В заблокированном состоянии какой-то поток владеет блокировкой; в разблокированном состоянии,
ни один поток не владеет им.

Чтобы заблокировать блокировку, поток вызывает свой метод Acquire () ; это
возвращается, когда поток владеет блокировкой.Чтобы разблокировать блокировку, поток вызывает
его метод release () . приобретение () / выпуск ()
пары вызовов могут быть вложенными; только последний выпуск () (
Отпуск () внешней пары) сбрасывает блокировку в разблокированное и
позволяет продолжить работу другому потоку, заблокированному в Acquire () .

Реентерабельные блокировки также поддерживают протокол управления контекстом.

класс нарезание резьбы. RLock

Этот класс реализует объекты реентерабельной блокировки.Повторная блокировка должна быть
выпущен потоком, который его приобрел. Как только поток получил
повторная блокировка, тот же поток может получить ее снова без блокировки; в
поток должен освобождать его каждый раз, когда он его получает.

Обратите внимание, что RLock на самом деле является заводской функцией, которая возвращает экземпляр
наиболее эффективной версии конкретного поддерживаемого класса RLock
у платформы.

получить ( блокировка = Истина , тайм-аут = -1 )

Получите блокировку, блокирующую или неблокирующую.

При вызове без аргументов: если этот поток уже владеет блокировкой, увеличить
уровень рекурсии на единицу и немедленно вернуться. В противном случае, если другой
поток владеет блокировкой, блокируйте, пока блокировка не будет разблокирована. Как только замок
разблокирован (не принадлежит ни одному потоку), затем захватить владение, установить уровень рекурсии
к одному и вернуться. Если заблокировано более одного потока, ожидая блокировки
разблокирован, только один может получить право владения замком.
В этом случае нет возвращаемого значения.

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

При вызове с параметром , блокирующим аргумент , установленным в значение false, не блокировать. Если звонок
без аргумента будет блокироваться, немедленно вернуть False ; в противном случае сделайте
то же самое, что и при вызове без аргументов, и возвращает True .

При вызове с плавающей точкой тайм-аут аргумент установлен в положительное значение
значение, блокируется максимум на количество секунд, указанное в тайм-ауте
и пока блокировка не может быть получена.Вернуть True , если блокировка
было получено, false, если истекло время ожидания.

Изменено в версии 3.2: Новый параметр тайм-аут .

выпуск ()

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

Вызывайте этот метод, только если вызывающий поток владеет блокировкой. А
RuntimeError возникает, если этот метод вызывается при блокировке.
разблокирован.

Нет возвращаемого значения.

Состояние объектов

Условная переменная всегда связана с какой-либо блокировкой; это может быть
передается или один будет создан по умолчанию.Передача одного полезна, когда
несколько переменных условия должны использовать одну и ту же блокировку. Замок является частью
объект условия: вам не нужно отслеживать его отдельно.

Условная переменная подчиняется протоколу управления контекстом:
использование с оператором получает связанную блокировку на время
закрытый блок. приобретают () и
release () методы также вызывают соответствующие методы
связанная блокировка.

Другие методы должны вызываться с удерживаемой связанной блокировкой.В
wait () снимает блокировку, а затем блокируется до тех пор, пока
другой поток пробуждает его, вызывая notify () или
notify_all () . После пробуждения wait ()
повторно получает замок и возвращается. Также можно указать тайм-аут.

Метод notify () пробуждает один из потоков, ожидающих
переменная условия, если таковая ожидает. notify_all ()
пробуждает все потоки, ожидающие переменной условия.

Примечание: методы notify () и notify_all ()
не отпускайте замок; это означает, что пробужденная нить или нити будут
не возвращаться из своего вызова wait () немедленно, а только когда
поток, который вызвал notify () или notify_all ()
наконец отказывается от владения замком.

Типичный стиль программирования с использованием условных переменных использует блокировку для
синхронизировать доступ к некоторому общему состоянию; темы, которые заинтересованы в
конкретное изменение состояния вызовите wait () несколько раз, пока они
увидеть желаемое состояние, в то время как потоки, которые изменяют состояние, вызывают
notify () или notify_all () при их изменении
состояние таким образом, чтобы это могло быть желаемое состояние для одного
официантов.Например, следующий код является общим
Ситуация производитель-потребитель с неограниченной буферной емкостью:

 # Потребление одного предмета
с резюме:
    пока не an_item_is_available ():
        cv.wait ()
    get_an_available_item ()

# Произвести один предмет
с резюме:
    make_an_item_available ()
    cv.notify ()
 

Цикл и необходим для проверки условий приложения
потому что wait () может вернуться через произвольно долгое время,
и условие, которое вызвало вызов notify () , может
больше не актуально.Это присуще многопоточному программированию. В
wait_for () Метод может использоваться для автоматизации условия
проверка и упрощает вычисление таймаутов:

 # Потребление предмета
с резюме:
    cv.wait_for (an_item_is_available)
    get_an_available_item ()
 

Чтобы выбрать между notify () и notify_all () ,
подумайте, может ли одно изменение состояния быть интересным только для одного или нескольких
ожидающие потоки. Например. в типичной ситуации производитель-потребитель, добавив один
элемент в буфер необходимо только для того, чтобы разбудить один потребительский поток.

класс нарезание резьбы. Состояние ( блокировка = Нет )

Этот класс реализует объекты переменных условий. Условная переменная
позволяет одному или нескольким потокам ждать, пока они не будут уведомлены другим потоком.

Если задан аргумент lock , а не None , это должна быть Lock
или RLock объект, и он используется в качестве базовой блокировки. Иначе,
создается новый объект RLock , который используется в качестве базовой блокировки.

Изменено в версии 3.3: изменена с фабричной функции на класс.

получить ( * аргументы )

Получите базовую блокировку. Этот метод вызывает соответствующий метод на
лежащий в основе замок; возвращаемое значение - это то, что возвращает этот метод.

выпуск ()

Снять базовую блокировку. Этот метод вызывает соответствующий метод на
лежащий в основе замок; нет возвращаемого значения.

ждать ( тайм-аут = нет )

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

Этот метод снимает базовую блокировку, а затем блокирует ее до тех пор, пока не будет
пробуждается вызовом notify () или notify_all () для того же
условная переменная в другом потоке или до необязательного тайм-аута
имеет место.После пробуждения или истечения времени ожидания он повторно устанавливает блокировку и возвращается.

Если присутствует аргумент тайм-аут , а не Нет , это должен быть
число с плавающей запятой, определяющее тайм-аут для операции в секундах
(или их части).

Когда базовая блокировка - это RLock , она не снимается с помощью
его метод release () , так как он может фактически не разблокировать блокировку
когда он был получен несколько раз рекурсивно. Вместо этого внутренний
используется интерфейс класса RLock , что действительно его разблокирует
даже если он был получен рекурсивно несколько раз.Другой внутренний
затем используется интерфейс для восстановления уровня рекурсии, когда блокировка
повторно приобретен.

Возвращаемое значение - Истина , если не истек заданный тайм-аут , в котором
случае это Ложь .

Изменено в версии 3.2: ранее метод всегда возвращал Нет .

wait_for ( предикат , тайм-аут = Нет )

Подождите, пока условие не станет истинным. предикат должен быть
вызываемый, результат которого будет интерпретирован как логическое значение.
Может быть предоставлен тайм-аут , дающий максимальное время ожидания.

Этот служебный метод может вызывать wait () несколько раз, пока предикат
выполняется или пока не истечет время ожидания. Возвращаемое значение -
последнее возвращаемое значение предиката и будет оценивать как
Ложь , если истекло время ожидания метода.

Игнорирование функции тайм-аута, вызов этого метода примерно эквивалентен
письмо:

 без predicate ():
    резюме.ждать()
 

Следовательно, применяются те же правила, что и для wait () : Блокировка должна быть
удерживается при вызове и повторно приобретается при возврате. Предикат оценивается
с удерживаемым замком.

уведомить ( n = 1 )

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

Этот метод пробуждает не более n потоков, ожидающих выполнения условия
Переменная; это не работает, если нет ожидающих потоков.

Текущая реализация пробуждает ровно n потоков, если не менее n
потоки ждут. Однако полагаться на такое поведение небезопасно.
Будущая оптимизированная реализация может иногда пробуждать более чем
n ниток.

Примечание: пробужденный поток фактически не возвращается из своего wait ()
звоните, пока он не сможет восстановить блокировку. Поскольку notify () не
отпустите блокировку, ее вызывающий должен.

notify_all ()

Разбудить все потоки, ожидающие этого условия.Этот метод действует как
notify () , но пробуждает все ожидающие потоки вместо одного. Если
вызывающий поток не получил блокировку при вызове этого метода,
RuntimeError возникает.

Объекты семафоров

Это один из старейших примитивов синхронизации в истории компьютеров.
наука, изобретенная ранним голландским ученым-компьютерщиком Эдсгером В. Дейкстра (он
использовали имена P () и V () вместо collect () и
Выпуск () ).

Семафор управляет внутренним счетчиком, который уменьшается на каждый
accept () вызов и увеличивается с каждым вызовом release ()
вызов. Счетчик никогда не может опуститься ниже нуля; когда получить ()
обнаруживает, что он равен нулю, он блокируется, ожидая, пока какой-либо другой поток не вызовет
Выпуск () .

Семафоры также поддерживают протокол управления контекстом.

класс нарезание резьбы. Семафор (значение = 1 )

Этот класс реализует семафорные объекты.Семафор управляет атомарным
счетчик, представляющий количество вызовов release () минус количество
Acquire () вызовов плюс начальное значение. Метод Purchase ()
блокирует при необходимости до тех пор, пока не сможет вернуться без отрицательного значения счетчика.
Если не указан, значение по умолчанию равно 1.

Необязательный аргумент дает начальное значение для внутреннего счетчика; Это
по умолчанию 1 . Если заданное значение меньше 0, ValueError
поднятый.

Изменено в версии 3.3: изменена с фабричной функции на класс.

получить ( блокировка = Истина , тайм-аут = Нет )

Получить семафор.

При вызове без аргументов:

  • Если внутренний счетчик больше нуля при входе, уменьшите его на
    one и немедленно верните True .

  • Если внутренний счетчик равен нулю при входе, блокировка до пробуждения вызовом
    Выпуск () .Однажды проснувшись (а счетчик больше
    чем 0), уменьшите счетчик на 1 и верните True . Ровно один
    поток будет пробуждаться при каждом вызове release () . В
    порядок, в котором пробуждаются потоки, не следует полагаться.

При вызове с блокировкой для установлено значение false, не блокировать. Если звонок
без аргумента будет блокироваться, немедленно вернуть False ; в противном случае сделайте
то же самое, что и при вызове без аргументов, и возвращает True .

При вызове с таймаутом , отличным от Нет , он будет заблокирован на
Максимальный таймаут секунд. Если получение не завершится успешно в
этот интервал верните False . В противном случае верните Истинно .

Изменено в версии 3.2: Новый параметр тайм-аут .

выпуск ( n = 1 )

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

Изменено в версии 3.9: добавлен параметр n для одновременного освобождения нескольких ожидающих потоков.

класс нарезание резьбы. BoundedSemaphore (значение = 1 )

Класс, реализующий ограниченные семафорные объекты. Ограниченный семафор проверяет
убедитесь, что его текущее значение не превышает его начальное значение.Если это так,
ValueError возникает. В большинстве случаев семафоры используются для защиты
ресурсы с ограниченными возможностями. Если семафор отпущен слишком много раз
это признак ошибки. Если не указан, значение по умолчанию равно 1.

Изменено в версии 3.3: изменена с фабричной функции на класс.

Семафор Пример

Семафоры часто используются для защиты ресурсов с ограниченной емкостью, например,
сервер базы данных.В любой ситуации, когда размер ресурса фиксирован,
вам следует использовать ограниченный семафор. Перед созданием любых рабочих потоков ваш
основной поток инициализирует семафор:

 maxconnections = 5
# ...
pool_sema = BoundedSemaphore (значение = maxconnections)
 

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

 с pool_sema:
    conn = connectdb ()
    пытаться:
        # ... использовать соединение ...Ну наконец то:
        conn.close ()
 

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

Объекты событий

Это один из простейших механизмов связи между потоками: один
поток сигнализирует о событии, и другие потоки его ждут.

Объект события управляет внутренним флагом, которому можно присвоить значение true с помощью
set () метод и сбросить значение false с помощью clear ()
метод.Метод wait () и блокируется, пока флаг не станет истинным.

класс нарезание резьбы. Событие

Класс, реализующий объекты событий. Событие управляет флагом, который может быть установлен на
true с помощью метода set () и сбросить до false с помощью
clear () метод. Метод wait () и блокируется до тех пор, пока флаг не станет истинным.
Флаг изначально ложный.

Изменено в версии 3.3: изменена с фабричной функции на класс.

is_set ()

Вернуть Истина тогда и только тогда, когда внутренний флаг истинен.

комплект ()

Установить для внутреннего флага значение true. Все потоки ждут, пока это станет правдой
пробуждаются. Потоки, которые вызывают wait () после установки флага, будут
не блокировать вообще.

прозрачный ()

Сброс внутреннего флага на ложное. Впоследствии потоки, вызывающие
wait () будет блокироваться до тех пор, пока не будет вызван set () для установки внутреннего
флаг снова в истинное значение.

ждать ( тайм-аут = нет )

Блокировать до тех пор, пока внутренний флаг не станет истинным. Если внутренний флаг установлен на
вход, немедленно возвращайся. В противном случае блокируйте, пока другой поток не вызовет
set () , чтобы установить флаг в значение «истина» или пока не истечет необязательный тайм-аут.

Если присутствует аргумент тайм-аута, а не Нет , он должен быть
число с плавающей запятой, определяющее тайм-аут для операции в секундах
(или их части).

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

Изменено в версии 3.1: ранее метод всегда возвращал Нет .

Объекты таймера

Этот класс представляет действие, которое следует запускать только после определенного количества
времени прошло - таймер. Таймер является подклассом Thread
и как таковой также служит примером создания настраиваемых потоков.

Таймеры запускаются, как и потоки, путем вызова их start ()
метод. Таймер можно остановить (до того, как его действие начнется), вызвав
cancel () метод. Интервал ожидания таймера перед
выполнение его действия может не совпадать с интервалом, указанным в
Пользователь.

Например:

 def привет ():
    print ("привет, мир")

t = Таймер (30.0, привет)
t.start () # через 30 секунд будет напечатано "hello, world"
 
класс нарезание резьбы. Таймер ( интервал , функция , args = нет , kwargs = нет )

Создайте таймер, который будет запускать функцию с аргументами , аргументами и ключевым словом
arguments kwargs , после интервала прошло секунд.
Если аргументов равно Нет (по умолчанию), то будет использоваться пустой список.Если kwargs равно None (по умолчанию), то будет использоваться пустой dict.

Изменено в версии 3.3: изменена с фабричной функции на класс.

отменить ()

Остановить таймер и отменить выполнение действия таймера. Это будет
работают только в том случае, если таймер все еще находится в стадии ожидания.

Заградительные объекты

Этот класс предоставляет простой примитив синхронизации для использования с фиксированным номером.
потоков, которым нужно ждать друг друга.Каждый из потоков пытается пройти
барьер, вызвав метод wait () и будет блокироваться до тех пор, пока
все потоки выполнили свои вызовы wait () . На этой точке,
потоки освобождаются одновременно.

Барьер можно использовать повторно любое количество раз для одного и того же количества потоков.

В качестве примера приведем простой способ синхронизации клиентского и серверного потоков:

 b = Барьер (2, тайм-аут = 5)

def server ():
    start_server ()
    b.wait ()
    в то время как True:
        соединение = accept_connection ()
        process_server_connection (соединение)

def client ():
    б.ждать()
    в то время как True:
        соединение = make_connection ()
        process_client_connection (соединение)
 
класс нарезание резьбы. Барьер ( сторон , действие = Нет , тайм-аут = Нет )

Создать объект барьера для сторон количество потоков. Действие , когда
при условии, вызывается одним из потоков, когда они
вышел. тайм-аут - значение тайм-аута по умолчанию, если для
метод wait () .

ждать ( тайм-аут = нет )

Пройти шлагбаум. Когда все потоки, участвующие в барьере, вызвали
В этой функции все они запускаются одновременно. Если таймаут
при условии, что он используется вместо любого, что было предоставлено классу
конструктор.

Возвращаемое значение - целое число в диапазоне от 0 до сторон - 1, разные
для каждого потока. Это можно использовать для выбора потока для выполнения каких-то специальных
ведение домашнего хозяйства, e.г .:

 я = барьер.wait ()
если я == 0:
    # Только один поток должен это напечатать
    print («преодолел барьер»)
 

Если конструктору было предоставлено действие , один из потоков будет
позвонили ему до того, как его выпустили. Если этот вызов вызывает ошибку,
шлагбаум переводится в разрушенное состояние.

Если время вызова истекло, шлагбаум переводится в неработающее состояние.

Этот метод может вызвать исключение BrokenBarrierError , если
барьер нарушен или сброшен, пока поток ожидает.

сброс ()

Вернуть барьер в пустое состояние по умолчанию. Любые потоки, ожидающие его
получит исключение BrokenBarrierError .

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

прервать ()

Привести шлагбаум в сломанное состояние.Это вызывает любые активные или будущие
вызывает wait () для отказа с BrokenBarrierError . Использовать
это, например, если один из потоков необходимо прервать, чтобы избежать взаимоблокировки
применение.

Может быть предпочтительнее просто создать барьер с разумной
тайм-аут Значение для автоматической защиты от одного из потоков
наперекосяк.

партий

Количество нитей, необходимое для прохождения барьера.

n_waiting

Число потоков, ожидающих в данный момент в барьере.

сломано

Логическое значение Истинно , если барьер находится в разорванном состоянии.

исключение нарезание резьбы. BrokenBarrierError

Это исключение, подкласс RuntimeError , возникает, когда
Барьер объект сброшен или сломан.

Использование блокировок, условий и семафоров в

с оператором

Все объекты, предоставленные этим модулем, которые имеют acqu () и
release () методы могут использоваться в качестве менеджеров контекста для с
утверждение. Метод Acquire () будет вызываться, когда блок
input, и release () будет вызываться при выходе из блока. Следовательно,
следующий фрагмент:

 с some_lock:
    # сделай что-нибудь...
 

эквивалентно:

 some_lock.