java.lang.Thread静态方法如何工作?

时间:2013-02-19 08:34:02

标签: java multithreading

E.g。方法public static void sleep(long millis)。此方法导致当前线程休眠,但它如何知道哪个线程是最新的?静态方法是独立于对象的,属于类,所以这个机制如何工作?

5 个答案:

答案 0 :(得分:3)

  

此方法导致当前线程休眠,但它如何知道哪个线程是最新的?

当前线程由底层操作系统(或线程系统)管理。底层(系统相关的)线程实现提供了当前线程的句柄:

  • 对于 POSIX 线程,有一个API调用pthread_self(),它返回当前正在执行的线程的线程ID。您可以想到Thread.currentThread()最终调用此C函数并将线程ID包装在Java Thread对象中,然后返回该对象。

  • 对于 MS Windows ,有API调用GetCurrentThread(),它返回当前正在执行的线程的Windows句柄。同样,您可以考虑Thread.currentThread()最终调用此C函数并将Handle包装在返回的Java Thread对象中。

答案 1 :(得分:3)

native 方法很特别。他们可以访问Java API。

在这种情况下,到当前线程。您不能使用此方法将另一个线程置于休眠状态 - 另一个线程必须自己执行此操作(但显然您可以向其发送消息)。

答案 2 :(得分:0)

始终为当前/正在执行的线程调用此方法。

答案 3 :(得分:0)

这意味着您当前的线程将进入睡眠模式一段时间。 例如:如果我将编写Thread.sleep(1000)线程将进入睡眠状态1000毫秒。 我们主要使用这个menthod在线程之间进行交换。简而言之,它将为另一个执行线程提供机会。

答案 4 :(得分:0)

当前线程是实际执行该段代码的线程。就这么简单。

例如:

public static void main(String[] args) {
    Runnable r = new Runnable() {
        @Override
        public void run() {
             System.out.println("Before sleeping!");
             Thread.sleep(10000);
             System.out.println("After sleeping!");
        }
    }
    Thread t1 = new Thread(r);
    Thread t2 = new Thread(r);
    System.out.println("Main thread!");
}

可能输出如下内容:

Before sleeping!  // t1
Main thread!      // main
Before sleeping!  // t2
After sleeping!   // t1
After sleeping!   // t2