시작의 차이 스레드 및 방법의 실행

공개  수업 을 ThreadTest {
     // 방법의 정의 
    개인  정적  무효 testdemo () {
         // 스레드 이름으로 출력이 
        에서 System.out.println ( "방법은 여기 testdemo :"+를 .는 Thread.currentThread () getName ());
    }
    공공  정적  무효 메인 (문자열 []에 args) {
        스레드 t은 = 스레드 () {
             공공  무효 실행 () {
                testdemo ();
            }
        };
        에서 System.out.println는 ( "이 주된 방법이다 :"+ .는 Thread.currentThread () getName ());
        () t.run; 
     // t.start (); } }

결과는 실행 메서드 호출에 표시

 

 

 결과라고 시작하는 방법에 표시

 

 接下来我们来看下调用start这个方法为什么会不一样

点击进入start这个方法

 

jdk网站:http://hg.openjdk.java.net

 

进入到具体的目录:http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/b860bcc84d51/src/share/native/java/lang

这里看的是jdk8的

 进入Thread.c这个文件

 

 来到JVM文件:http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/8c0fa90986a6/src/share/vm/prims/jvm.cpp

搜索JVM_StartThread

 

 然后再去深入看下thread_entry这里做了什么

 

1、调用start方法的时候是会去创建一个新的子线程,但是最后还是调用了run方法;即调用start()--->start0()-->JVM_StartThread-->thread_entry-->run()

2、调用run方法的时候还在主线程调用,即t.run();-->Thread这个类中的重写的run方法

start方法最后还是调用了run方法,所以两者除了执行步骤不一样,其他都差不多

 

추천

출처www.cnblogs.com/ltzdream/p/12147650.html