Подтвердить что ты не робот

Какова разница между методом сна и методом выхода многопоточности?

Как в настоящее время выполняется поток, когда он встречает вызов [sleep][1]();, тогда поток немедленно перемещается в состояние спящего режима где для [yield][2](); поток переходит в состояние запуска/готовности

4b9b3361

Ответ 1

sleep() заставляет поток определенно прекратить выполнение в течение заданного промежутка времени; если никакой другой поток или процесс не нужно запускать, CPU будет простаивать (и, вероятно, перейти в режим энергосбережения).

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

Ответ 2

Мы можем предотвратить выполнение потока с помощью любого из трех методов класса Thread:

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

  • join() Если какой-либо исполняемый поток t1 вызывает join() на t2 i.e; t2.join() сразу t1 войдет в состояние ожидания до тех пор, пока t2 не завершит выполнение.

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

Ответ 3

Sleep() заставляет текущий исполняемый поток спать (временно прекратить выполнение).

Выход() заставляет временно исполняемый объект потока временно приостанавливаться и разрешать выполнение других потоков.

enter image description here

Прочтите это для хорошего объяснения темы.

Ответ 4

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

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

Присоединиться: t1 и t2 - два потока, вызывается t2.join(), тогда t1 переходит в состояние ожидания, пока t2 не завершит выполнение. Затем t1 войдет в состояние runnable, тогда наш специализированный планировщик потоков JVM будет выбирать t1 на основе критериев.

Ответ 5

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

Ответ 6

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

Thread.sleep();

Sleep: блокирует выполнение определенного потока в течение заданного времени.

TimeUnit.MILLISECONDS.sleep(1000);

Ответ 7

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

Ответ 8

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

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

public class Solution9  {

public static void main(String[] args) {
        yclass yy = new yclass ();
        Thread t1= new Thread(yy);
        t1.start();
        for (int i = 0; i <3; i++) {
            Thread.yield();
            System.out.println("during yield control => " + Thread.currentThread().getName());
        }
    }
}

class yclass implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i < 3; i++) {
            System.out.println("control => " + Thread.currentThread().getName());
        }
    }
}

Ответ 9

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

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

Для подробного объяснения смотрите эту ссылку.

Ответ 10

yield(): предположим, что есть три потока t1, t2 и t3. Поток t1 получает процессор и начинает его выполнение, а потоки t2 и t3 находятся в состоянии Ready/Runnable. Время завершения для потока t1 составляет 5 часов, а время завершения для t2 составляет 5 минут. Поскольку t1 завершит свое выполнение через 5 часов, t2 должен ждать 5 часов, чтобы просто завершить 5-минутную работу. В таких сценариях, когда одному потоку требуется слишком много времени для завершения своего выполнения, нам нужен способ предотвратить выполнение промежуточного потока, если ожидается что-то важное. Yeild() помогает нам в этом. yield() в основном означает, что поток не выполняет ничего особенно важного, и если необходимо запустить какие-либо другие потоки или процессы, они должны выполняться. В противном случае текущий поток продолжит работу.

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

Ответ 11

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

Sleep(): метод остановит поток на определенное время (время будет указано в миллисекундах). Если это единственный поток, который работает, то процессор будет в идеальном состоянии в этот период времени.

Оба являются статическим подходом.