Как справиться с тупиком в Java?



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

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

Что такое тупик в Java?

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





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

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



Тупик в Java - Edureka

Пример тупика

public class Example {public static void main (String [] args) {final String r1 = 'edureka' final String r2 = 'java' Thread t1 = new Thread () {public void run () {synchronized (r1) {System. out.println ('Thread 1: Locked r1') попробуйте {Thread.sleep (100)} catch (исключение e) {} synchronized (r2) {System.out.println ('Thread 1: Locked r2')}}} } Thread t2 = new Thread () {public void run () {synchronized (r1) {System.out.println ('Thread 2: Locked r1') try {Thread.sleep (100)} catch (исключение e) {} synchronized (r2) {System.out.println ('Thread 2: Locked r2')}}}} t1.start () t2.start ()}}
 Вывод: Тема 1: Заблокирована r1 Тема 2: Заблокирована r2

Как избежать тупика в Java?

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

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

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



    что такое параметр в таблице
  • Использование объединения потоков - Тупик обычно случается, когда один поток ожидает завершения другого. В этом случае мы можем использовать Thread.join с максимальным временем, которое займет поток.

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

Если вы нашли эту статью «Тупик в Java» релевантной, ознакомьтесь с надежная компания онлайн-обучения с сетью из более чем 250 000 довольных учащихся по всему миру.

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

Если у вас возникнут какие-либо вопросы, не стесняйтесь задавать все свои вопросы в разделе комментариев «Deadlock In Java», и наша команда будет рада ответить.