小弟初学JAVA,对其多线程的机制有点疑问:因为多线程和多进程都是需要底层操作系统来进行支持的,而JAVA只是一种普通的编程语言,只不过是平台无关的而已;这样子的话,平台那么多,JAVA它又是如何在那么多平台上实现多线程呢?
或者这样子说,虚拟机是如何调用操作系统提供的多线程接口的呢,毕竟两者是用不同语言开发的,JAVA又是如何做到的呢?谢谢回答!
或者这样子说,虚拟机是如何调用操作系统提供的多线程接口的呢,毕竟两者是用不同语言开发的,JAVA又是如何做到的呢?谢谢回答!
一种平台一种jvm
JVM与平台相关。
你使用Java开发程序,生成中间代码。由JVM解释执行。
与平台无关的概念就是这样的。
这也是Java速度慢的原因,因为是解释执行的。
不象.exe是编译成二进制代码,直接运行。
不同的操作系统实现的线程机制也不同。Java,在理论上,至少有10个线程优先等级划分。在Solaris里,支持231个优先等级,当然对于支持Java那10个的等级是没问题的。在NT下,最多只有7优先级划分,却必须映射到Java的10个等级。这就会出现很多的可能性。
因此,在NT下依靠优先级来调度线程时存在很多问题。NT下的线程优先级竟然还不是固定的!NT提供了一个名叫优先级助推的机制来改变线程优先级,但Java不能这样做。
早期的Solaris JVM与现在Solaris JVM的线程模式也是相反,早期的Solaris JVM采取严格的协作式机制。JVM相当于一个LWP,所有Java线程共享这唯一一个LWP。现在Solaris JVM又采用彻底的抢先式模型了,所有的线程独占各自的LWP。
我们就连JVM采用那种模式的线程机制都无法确定。为了写出跨平台的代码,必须做出两个表面上矛盾的假设。
对于不同的平台,都有其相应的JVM实现,但是JVM都应该是严格按照JVM规范来实现的...
JAVA其实就是把平台相关性放到了JVM上,在JVM的平台之上实现了平台无关性
=====================================其实这没什么啊,我本身就是计算机专业的,做的就是软件,搞懂这些也是情理之中的事情阿。另外,你说的操作系统和硬件设备接口,这大学里都有学过理论(《操作系统》和《计算机组成原理》);大学的理论就是要我们到具体的工作中去理解和应用,你说不是吗?另外,很多底层的东西并不是想象中那么深不可测的,更多的是我们主观的认为它很复杂;实际上那都是创造者鼓吹出来的,用老毛的话说就是“纸老虎”,因为它都是用我们经常接触的语言来编写的;再说了,研究一下底层的东西,并不是要知道它的每一行代码实现的功能,实际上只要知道它实现的机理,它的架构,它的逻辑流程也就可以了;知道它是怎么搭建起来的;这好比建筑,能够看懂设计图纸就可以了,具体的实现就不用去管了。
还有不知道你是不是明白api,虚拟机不可能再有什么别的方法去和操作系统打交道把