面试对线记录12 线程实现和创建方式

这段我也被问到过,我觉得还是要自己学习一下比较好,而且讲真,自己在使用过程中对这部分掌握的不是很熟,所以在这里学习记录一下

  1. 继承Thread类 在Java中有个类就叫做Thread类,这个类其实从根上来说也是继承了Runnable接口的一个实例,在这个类中启动线程的方法,就是通过Thread的start方法,但是要在这里注意一下,start方法其实是个native方法。还记得前面帖子中JVM中关于navite方法的东西吗,好吧其实我也忘了,,,
    在JVM中 其实有个东西叫做本地方法栈 本地方法就是JVM为了运行Native方法的空间,因为Native方法很多的话都是用c实现的,所以他又被称为C栈,他跟Java虚拟机栈差不多,只不过本地方法栈是描述本地方法运行过程的内存模型。
    在本地方法被执行时,在本地方法栈会创建一个栈帧,用于存放该方法的局部变量表,操作数栈,动态链接,方法出口信息等。
    方法执行结束后,相应的栈帧也会出栈,并且释放内存空间,也会抛出StackOberFlowError和OutOfMemoryError异常。
    注意,在HotSpot VM中就直接把本地方法栈和虚拟机栈直接合二为一了。
    如果Java虚拟机本身不支持Native方法或者本身不依赖于传统栈,那么就可以不提供本地方法栈,如果支持本地方法栈,那么这个栈一般会在线程创建的时候按线程分配。
    在这里的话啥是本地方法(Native Method)呢,其实简单来说Native Method方法就是一个java调用非Java语言实现方法的接口,这个方法的方法体其实大部分都是非Java实现的,比如C或者其他语言实现,很多语言中其实都有,比如C++中调用C函数的话一般会在文件头那里写上 extern “c”告知GCC编译器去处理C函数时按照C函数去处理。
    比如哈
       public class IHaveNatives 
       { 
           native public void Native1( int x ) ; 
           native static public long Native2() ; 
           native synchronized private float Native3( Object o ) ; 
           native void Native4( int[] ary ) throws Exception ; 
       } 

这些方法的声明就是一些非Java方法在Java中的签名状态。
其实natvie这个关键字也可以与其他Java关键字连用,但是肯定不能和abstract一起连用,因为abstract在修饰方法的时候说明该方法没有方法体,但是native修饰的方法肯定是有方法体的,只是这个方法的方法体是由非Java方法实现的