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

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

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

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

СОДЕРЖАНИЕ

1. Обзор и основные отличия
2. Что такое сон на Яве
3. Что такое ожидание в Java
4. Сходства между сном и ожиданием в Java
5. Сравнение бок о бок - сон против ожидания в Java в табличной форме
6. Резюме

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

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

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

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

Рисунок 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. Метод wait используется, чтобы позволить текущему потоку снять блокировку и ждать, пока другой поток не вызовет метод notify или notifyAll для объекта. Метод notify используется для пробуждения одного потока, ожидающего блокировки. NotifyAll активирует все потоки, ожидающие блокировки.

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

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

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

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

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

 t1. Начало ();

System.out.println (t1.sum);

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

  • Как sleep, так и wait являются методами, которые можно использовать при реализации многопоточности в Java.

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

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

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

Резюме - спать против ждать в Джава

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

Ссылка:

1. «Межпотоковое взаимодействие в Java - Javatpoint».. JavaTPoint. Доступна здесь
2. Интер Нить Общение в Java Многопоточность | Базовое руководство по Java | Studytonight. Доступна здесь