线程相关(三)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是线程执行的方法,创建进线程。
再从底层看

start方法.png

start0.png
JVM_StartThread.png
new JavaThread.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    胜浩_ae28阅读 10,541评论 0 23
  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    小徐andorid阅读 7,858评论 3 53
  •   一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺...
    OmaiMoon阅读 5,636评论 0 12
  • 0 前言 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要...
    七寸知架构阅读 10,564评论 2 63
  • 城市中心,商业繁荣,楼宇集聚。 在这里生活着这样一群“白骨精” ps:白骨精=白领、骨干、精英 他们普遍拥有“高学...
    一宗深夜食堂阅读 1,657评论 0 0