Разница между сном и ожиданием в Java

Оглавление:

Разница между сном и ожиданием в Java
Разница между сном и ожиданием в Java

Видео: Разница между сном и ожиданием в Java

Видео: Разница между сном и ожиданием в Java
Видео: ООП. Java vs JavaScript. Part 1. Ответ на 3-й вопрос 2024, Апрель
Anonim

Ключевое отличие - сон против ожидания в Java

Сон и ожидание - два метода, используемых для многопоточности в Java. Метод сна принадлежит классу Thread, а метод ожидания - классу Object. Ключевое различие между засыпанием и ожиданием в Java заключается в том, что засыпание используется для приостановки выполнения текущего потока на указанное количество миллисекунд, в то время как метод ожидания используется для того, чтобы заставить текущий поток ждать, пока другой поток не вызовет уведомление или notifyAll для объекта.

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

СОДЕРЖАНИЕ

1. Обзор и основные различия

2. Что такое спящий режим в Java

3. Что такое ожидание в Java

4. Сходства между засыпанием и ожиданием в Java

5. Параллельное сравнение - сон против ожидания в Java в табличной форме

6. Резюме

Что такое сон в Java?

В операционной системе запущено несколько процессов. Процесс - это выполняемая программа. Каждый процесс может иметь несколько потоков, и между этими потоками происходит переключение контекста. В Java есть два способа создать поток. То есть путем расширения класса потока или реализации интерфейса Runnable. Класс Thread имеет конструкторы и методы для создания и выполнения операций с потоком. Класс Thread расширяет класс Object и реализует интерфейс Runnable. Интерфейс Runnable должен быть реализован любым классом, экземпляры которого предназначены для выполнения потоком. Когда поток выполняется, код, который должен выполняться, записывается внутри метода run. Поток, который должен выполняться, выбирается планировщиком потоков. Только один поток выполняется в одном процессе.

Поток проходит несколько фаз. После создания объекта класса Thread программист может вызвать метод start. Перед вызовом этого метода считается, что поток находится в новом состоянии. Планировщик потоков выбирает поток для запуска. Если поток еще не выбран планировщиком потоков, но если вызывается метод запуска, то поток находится в рабочем состоянии. После того, как планировщик потоков выбирает поток для выполнения, он переходит в состояние выполнения. Если поток активен, но в настоящее время не может быть запущен, он находится в неработающем или заблокированном состоянии. После завершения метода run поток переходит в состояние завершения. Это основные фазы жизненного цикла потока.

В классе потока доступны различные методы для выполнения различных задач. Метод сна используется для сна метода на определенное время. Синтаксис метода сна: public void sleep (длинные миллисекунды) выдает исключение InterruptedException. Это заставляет текущий выполняющийся поток временно останавливать выполнение на указанное количество миллисекунд. Если другой поток прерывает текущий поток, состояние прерывания текущего потока сбрасывается при возникновении этого исключения.

Разница между сном и ожиданием в Java
Разница между сном и ожиданием в Java

Рисунок 01: Программа Java с методом сна

Согласно приведенной выше программе, метод run содержит код, который должен быть выполнен. В основной программе создаются два объекта ExampleThread1, и для них вызываются методы запуска. Это позволит запустить код внутри метода run. Одновременно выполняется только один поток. С нитью. сон (1000); позволит первому потоку завершить выполнение на 1000 миллисекунд. Когда поток спит, планировщик потоков перехватывает другой поток.

Что такое ожидание в Java?

Несколько потоков могут получить доступ к общему ресурсу. Это может вызвать неправильный вывод. Синхронизацию потоков можно использовать, чтобы сделать доступ к общему ресурсу только одним потоком. Предположим следующую ситуацию. Если есть два потока как t1 и t2, t1 начинает сохранять значения в текстовый файл с именем Text1.txt. Эти значения будут использоваться для некоторых других вычислений, когда вернется t1. Если t2 начинается до возврата t1, t2 может изменить значения, сохраненные t1. Это может привести к тому, что t1 выдаст неправильный вывод. С помощью синхронизации, когда t1 начинает использовать файл Text1.txt, этот файл можно заблокировать, поэтому он будет доступен только t1. T2 не может изменить его, пока t1 не снимет блокировку для доступа к этому текстовому файлу. Когда задача завершена, t1 может снять блокировку. Замок также известен как монитор.

Синхронизация потоков может быть достигнута за счет межпоточного взаимодействия. Критический раздел - это сегмент кода, который обращается к общим ресурсам. При межпотоковом взаимодействии поток приостанавливается в своем критическом разделе, и другому потоку разрешается войти в тот же самый критический раздел для выполнения. Реализуется с использованием методов wait, notify и notifyAll. Они принадлежат к классу Object. Метод ожидания используется, чтобы позволить текущему потоку снять блокировку и дождаться, пока другой поток не вызовет метод notify или notifyAll для объекта. Метод уведомления используется для пробуждения одного потока, ожидающего блокировки. NotifyAll пробуждает все потоки, ожидающие блокировки.

Разница между сном и ожиданием в Java Figure 02
Разница между сном и ожиданием в Java Figure 02

Рисунок 02: Класс калькулятора

Ключевое различие между сном и ожиданием в Java
Ключевое различие между сном и ожиданием в Java

Рисунок 03: Основной метод

Класс Calculator расширяет класс Thread. Блок synchronized находится внутри метода run. Цикл for и метод уведомления находятся внутри синхронизированного блока. Внутри основного метода создается экземпляр потока, и для этого экземпляра вызывается метод запуска. Основной метод будет ждать, пока поток не отправит уведомление. При выполнении программы основной метод ожидает полного выполнения метода run и ожидает метода уведомления. После вызова метода уведомления основной метод перестает ждать и начинает выполнение остальной части кода. Main ожидает завершения потока калькулятора. Наконец, выводится результат суммы.

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

Калькулятор t1 = новый Калькулятор ();

t1. Начало ();

System.out.println (t1.sum);

В чем сходство между сном и ожиданием в Java?

И сон, и ожидание - это методы, которые можно использовать при реализации многопоточности в Java

В чем разница между сном и ожиданием в Java?

Различать статью в середине перед таблицей

спать против ожидания в Java

Метод сна заставляет текущий поток приостанавливать выполнение на указанное количество миллисекунд в зависимости от точности и точности системных таймеров и планировщиков. Метод ожидания заставляет текущий поток ждать, пока другой поток не вызовет метод notify или notifyAll для объекта.
Связь с замком
Метод сна не снимает блокировку объекта во время синхронизации. Метод ожидания снимает блокировку во время синхронизации.
Способ исполнения
Метод сна выполняется в текущем потоке. Для объекта вызывается метод ожидания.
Связанный класс
Сон - это метод класса Thread. Ожидание - это метод класса Object.
Завершение
Процесс сна завершается по истечении указанного времени. Метод ожидания прерывается вызовом методов notify или notifyAll.

Резюме - сон против ожидания в Java

В операционной системе запущено несколько процессов. Каждый процесс может иметь несколько потоков. Поток - это наименьшая единица обработки в операционной системе. Язык программирования Java поддерживает многопоточность. Это позволяет запускать несколько потоков одновременно. Сон и ожидание - это два метода, которые можно использовать при реализации многопоточности. Разница между засыпанием и ожиданием в Java заключается в том, что засыпание используется для приостановки выполнения текущего потока на указанное количество миллисекунд, в то время как метод ожидания используется, чтобы заставить текущий поток ждать, пока другой поток не вызовет notify или notifyAll. метод для объекта.

Рекомендуем: