小弟初学JAVA,对其多线程的机制有点疑问:因为多线程和多进程都是需要底层操作系统来进行支持的,而JAVA只是一种普通的编程语言,只不过是平台无关的而已;这样子的话,平台那么多,JAVA它又是如何在那么多平台上实现多线程呢?
或者这样子说,虚拟机是如何调用操作系统提供的多线程接口的呢,毕竟两者是用不同语言开发的,JAVA又是如何做到的呢?谢谢回答!

解决方案 »

  1.   

    这也许需要指令集的知识
    一种平台一种jvm
      

  2.   

    Java与平台无关。
    JVM与平台相关。
    你使用Java开发程序,生成中间代码。由JVM解释执行。
    与平台无关的概念就是这样的。
    这也是Java速度慢的原因,因为是解释执行的。
    不象.exe是编译成二进制代码,直接运行。
      

  3.   

    Java虚拟机当然是必须与操作系统的相关接口打交道,所以每个操作系统都可能有自己的JVM但是这个并不会影响你程序的运行,因为在你的程序看来都是在JVM中,代码都是差不多的
      

  4.   

    哦,对不起,可能我说的不是很清楚,我的意思是说:操作系统提供的多线程接口并不是用JAVA开发的,那怎么能够被JAVA所调用呢?
      

  5.   

    主要是于JVM平台相关,所以楼主要彻底了解,还是研究一下JVM的原理,呵呵
      

  6.   

    JVM也不是Java开发的....... 当然是使用C开发的,所以可以调用操作系统的接口
      

  7.   

    操作系统也不是PASCAL开发的,delphi也可以调用啊,是JVM调用各个操作系统的
      

  8.   

    java对多线程的支持是通过jvm实现的,至于实现的细节对于每个操作系统都是不同的,好的jvm甚至可以在不支持多线程的操作系统中模拟出多线程的环境,如果你只是用java进行多线程编程,你没有必要了解它的实现方式。
      

  9.   

    Java线程系统现在必须考虑平台因素。
      

  10.   

    主要原因就是要实现彻底的平行运行的线程,如果不使用OS提供的系统线程模型,是不可能的。JVM必须把Java的线程映射到OS级的线程上去。
    不同的操作系统实现的线程机制也不同。Java,在理论上,至少有10个线程优先等级划分。在Solaris里,支持231个优先等级,当然对于支持Java那10个的等级是没问题的。在NT下,最多只有7优先级划分,却必须映射到Java的10个等级。这就会出现很多的可能性。
    因此,在NT下依靠优先级来调度线程时存在很多问题。NT下的线程优先级竟然还不是固定的!NT提供了一个名叫优先级助推的机制来改变线程优先级,但Java不能这样做。
      

  11.   

    非微软操作系统,每个进程或者线程都有优先级。高优先级的进程时不会被低优先级的进程打断的,一个进程的优先级可以由管理员限制和设定,以防止一个用户进程是打断OS核心进程或者服务。NT对此无法支持。NT不对进程的优先级类进行任何限制。运行在任意进程上的任意线程,可以通过优先级助推机制完全控制整个系统, OS核心没有任何的防御。
    早期的Solaris JVM与现在Solaris JVM的线程模式也是相反,早期的Solaris JVM采取严格的协作式机制。JVM相当于一个LWP,所有Java线程共享这唯一一个LWP。现在Solaris JVM又采用彻底的抢先式模型了,所有的线程独占各自的LWP。
    我们就连JVM采用那种模式的线程机制都无法确定。为了写出跨平台的代码,必须做出两个表面上矛盾的假设。
      

  12.   

    我认为除非你对线程的执行顺序有明确的要求(我个人认为如果很严格要求还不如就在一个线程里面做完算了),否则你使用Java的线程根本没有必要理会操作系统和JVM是如何处理的。你只需要知道你的线程不可以控制自己在什么时候会运行就可以了
      

  13.   

    JVM本身是一个程序,在它运行时,拥有一个进程,而它负责解释java的字节码,当它分析到需要创建线程时,jvm进程调用底层系统接口创建一个线程....(大概的理解是这样子,详细请看<深入java虚拟机> ^_^)
    对于不同的平台,都有其相应的JVM实现,但是JVM都应该是严格按照JVM规范来实现的...
    JAVA其实就是把平台相关性放到了JVM上,在JVM的平台之上实现了平台无关性
      

  14.   

    TO : yangbc(土豆块)这些接口之间的问题你现在根本理解不了,还是当一般的线程去理解学习就行了,你操心这个跟关心操作系统和硬件设备的接口有一比
    =====================================其实这没什么啊,我本身就是计算机专业的,做的就是软件,搞懂这些也是情理之中的事情阿。另外,你说的操作系统和硬件设备接口,这大学里都有学过理论(《操作系统》和《计算机组成原理》);大学的理论就是要我们到具体的工作中去理解和应用,你说不是吗?另外,很多底层的东西并不是想象中那么深不可测的,更多的是我们主观的认为它很复杂;实际上那都是创造者鼓吹出来的,用老毛的话说就是“纸老虎”,因为它都是用我们经常接触的语言来编写的;再说了,研究一下底层的东西,并不是要知道它的每一行代码实现的功能,实际上只要知道它实现的机理,它的架构,它的逻辑流程也就可以了;知道它是怎么搭建起来的;这好比建筑,能够看懂设计图纸就可以了,具体的实现就不用去管了。
      

  15.   

    JVM可以模拟多线程, 类似POSIX线程库。实际上多线程就是栈与系统原语的管理而已。
      

  16.   

    虚拟机是如何调用操作系统提供的多线程接口的呢,毕竟两者是用不同语言开发的,这是搂主你说的吧,我想知道你认为java虚拟机是什么语言开发的呢,我认为是和开发操作系统类似的语言,可能是c,决不是java;
    还有不知道你是不是明白api,虚拟机不可能再有什么别的方法去和操作系统打交道把