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

Java: почему Thread.sleep() и yield() являются статическими?

Почему методы sleep() и yield() определяются как методы static в java.lang.Thread class?

4b9b3361

Ответ 1

Код будет выполняться только тогда, когда выполнялся someXThread, и в этом случае сообщение someYThread для вывода было бы бессмысленным. Так как единственный поток, который стоит называть yield on, это текущий поток, они делают метод static, поэтому вы не тратите время на вызов yield на другой поток.

Ответ 2

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

Ответ 3

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

подобная тема в этом форуме

Ответ 4

По этой же причине методы stop() и suspend() устарели. Вторжение в состояние потока извне опасно и может привести к непредсказуемому результату. И если сон не является статичным, например, как вы думаете, произойдет ли его прерывание?

Ответ 5

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

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

http://i.stack.imgur.com/goygW.jpg

Ответ 6

Оба метода сна и урока являются родными. Чтобы лучше понять ответы выше, я сделал два класса ClassA и ClassB с помощью одного и того же статического метода. Я попробовал метод другого класса, чтобы проверить его поведение. Поэтому мы можем вызвать статический метод другого класса.
Так может быть и другая причина, по которой статический метод сна.

public class ClassA {

    public static void method(){
        System.out.println("Inside ClassA method");
    }

    public static void main(String[] args) {
        method();
        ClassB classb = new ClassB();
        classb.method();
    }
}

    public class ClassB {
    public static void method(){
        System.out.println("Inside ClassB method");
    } 

}