下面的代码显然不能编译。
public class Machine {
public int id;
static Machine staticMethod() { return this; } //compilation error - "Cannot use this in a static context"
maskId() { }
}
所以不可能从staticMethod()到
(1)获取特定于Machine Object
实例的信息(2)执行一个特定于Machine object
除非我错过了一些非常简单的东西。
Thread Class的静态方法如何处理特定线程的动作/信息?下面是java docs Thread 中这些方法的签名
static Thread currentThread()//返回当前正在执行的线程对象的引用。static void dumpStack()//将当前线程的堆栈跟踪信息打印到标准错误流
我错过什么了吗?或者这些方法(或线程类)不同吗?像本地实现等等,但是能够确定调用实例。
Thread
类是不同的,因为它处理的是核心JVM(通常是操作系统)构造。在OpenJDK中,它不仅是native
,而且还注释了一个提示,说明它是内置在JRE本身中,而不是由外部库提供的。
线程可以请求;我是哪条线?在任何点。它不需要像大多数值那样将this作为参数传递给它。有一个static
native
方法,它给出了当前线程,从那里这个对象可以有实例方法调用。
我认为这是由调度程序完成的,这里我提到类结构(这是我的看法,它是如何工作的)
class Thread{
static currentThread();
}
Class Scheduler{
//it has queue of all threads and also has track on current running thread
//queue = {Thread1,Thread2,Thread3,Thread4,Thread5}
// let thread3 is running, whenever a call to Thread3.currentThread come up
//some how jvm get instance of Thread3 from this queue and returns.
}