Thread类的静态sleep方法如何在没有访问'this'引用的情况下工作?

4
我对于静态方法有些困惑。静态方法没有访问“this”引用的能力。(在Java中,“this”是一个指向当前对象的引用。)当调用“Thread.sleep(millis)”时,线程如何选择静态的sleep方法来进行休眠呢?“Thread.sleep(long millis)”是一个静态方法,没有访问“this”引用的能力。
public class CurrentThreadDemo {
    public static void main(String... args) {

        Thread t = Thread.currentThread();

        System.out.println("Current thread: " + t);

        //change the name of the thread
        t.setName("My thread");
        System.out.println("After name change: " + t);

        try {
            for (int n = 5; n > 0; n--) {
                System.out.println(n);
                Thread.sleep(1000);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

2
https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#currentThread() - Mat
本地代码中的魔法。 - Radiodef
1
这不是一个引用变量,它只是一个引用。 - SpringLearner
了解如何选择通知哪个线程唤醒以及了解wait的工作原理会更好吗? - Volodymyr Levytskyi
3个回答

3
当调用Thread.sleep(millis)时,Thread类的静态sleep方法如何选择要休眠的线程。
Thread.sleep的规范是暂停当前线程,即调用sleep方法的线程。

在JAVA中有没有办法知道静态方法是从哪里调用的? - abcdef12
在任何方法(静态或非静态)中,您都可以构造一个 new Throwable() 并检查其堆栈跟踪,但这是一项相当缓慢的操作,因此不应该频繁执行。 - Ian Roberts

0

0
当调用Thread.sleep(millis)方法时,Thread类的静态sleep方法如何选择要休眠的线程?
它选择当前线程,即调用该方法的线程。 它由Thread.currentThread()返回。
Thread.sleep(long millis)是一个静态方法,没有访问此引用变量的权限。
我同意。那又怎样?它不需要它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接