在Java的自动内存分配中,我们看到一句话:
如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是native方法,这个计数器值则是为空(undefined);
问题:
我们知道,程序计数器用来存放字节码指令地址;通过这个地址,虚拟机就能知道执行到哪里,以及怎么往下执行,可调用native方法,值就变成空了,那么机器不就直接崩溃了吗?
解释:
参考C++理解是:当线程中调用native方法的时候,则重新启动一个新的线程,那么新的线程的计数器为空则不会影响当前线程的计数器,相互独立。
问题:
如果是新启动的一个线程,那么不会因为线程异步问题,无法控制执行顺序吗?
解释:
当前线程应当会被阻塞,知道另外一个线程执行结束。例如:通过死循环来控制阻塞(当然死循环效率太低,这里只是一个例子)