线程相关(三)run 和 start

先上代码来看两者区别

package test;

public class ThreadTest {
    
     public static void main(String args[]) {        
         ThreadSync syncThread1 = new ThreadSync();
         ThreadSync syncThread2 = new ThreadSync();
         Thread thread1 = new Thread(syncThread1, "SyncThread1");
         Thread thread2 = new Thread(syncThread2, "SyncThread2");
         thread1.run();
         thread2.start();
     }
}
package test;

public class ThreadSync implements Runnable{

    public void run() {
        function();
    }
    
    public synchronized static void function() {
        for (int i = 0; i < 5; i++) {
            try {
                System.out.println(Thread.currentThread().getName() + ":" + i);
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
main:0
main:1
main:2
main:3
main:4
SyncThread2:0
SyncThread2:1
SyncThread2:2
SyncThread2:3
SyncThread2:4

这个结果就已经说明了问题。
先从表面上看:run就是一个普通的方法,还是调用的主线程,并没有创建制定的新线程。start是线程执行的方法,创建进线程。
再从底层看

线程相关(三)run 和 start_第1张图片
start方法.png

线程相关(三)run 和 start_第2张图片
start0.png
线程相关(三)run 和 start_第3张图片
JVM_StartThread.png
线程相关(三)run 和 start_第4张图片
new JavaThread.png

你可能感兴趣的:(线程相关(三)run 和 start)