【发布时间】:2010-08-11 12:39:12
【问题描述】:
标准 Java API 中的某些类的处理方式与其他类略有不同。我说的是那些没有编译器和/或 JVM 的特殊支持就无法实现的类。
我马上想到的是:
-
Object(显然)因为它没有超类。 -
String因为该语言对 + 运算符有特殊支持。 -
Thread因为它有这个神奇的 start() 方法,尽管事实上没有“分叉”执行的字节码指令。
我想像这样的所有类都在 JLS 中以一种或另一种方式提及。如果我错了,请纠正我。
不管怎样,还有哪些这样的类? Java 语言中是否有完整的“美化类”列表?
【问题讨论】:
-
Generics 几乎适合,但不完全。它们是使用编译器技巧实现的,但它们并不孤立于一个类。
-
都是崇敬类型。 ;-)
-
“thread.start”神奇吗?当然,这只是调用了一些本机代码来执行此操作吗?
-
这个想法也让我印象深刻。也许仅 JNI 就足以实现 Thread 类。我想如果我尝试这样做,我会使用一些操作系统级别的线程 api,在 start() 方法的实现中分叉执行,在分叉的线程中执行 run() 方法,然后返回。但随后 my 操作系统线程将继续运行。这会与 JVM 创建的线程一起顺利运行吗?并尊重 JLS 内存模型等等?
-
根据规范,创建线程的唯一方法是从 Thread 类 (java.sun.com/docs/books/jvms/second_edition/html/…)。当然,它依赖于与 JVM 的一些原生级别的通信,但如果你自己做 JNI,你可能会启动一个线程,但你不会让 JVM 理解你在做什么(锁、内存模型等)。 )。线程具有特权,因为规范为其分配了特殊特权 - 启动线程的唯一方式。
标签: java