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