- start()和run()的区别
在Java中,run()方法和start()方法是与线程操作紧密相关的,两者之间存在本质的区别:
start()是Thread类的一个实例方法,它的主要作用是启动一个新的线程。当调用线程对象的start()方法时,Java虚拟机会为该线程分配必要的系统资源(如栈空间),并将其置于可运行状态(Runnable),等待CPU调度执行。简而言之,start()方法实际上启动了一个新线程并使其准备好执行,但并不意味着立即执行run()方法里的代码。
一旦线程获得CPU时间片,JVM会自动调用该线程的run()方法,执行线程要完成的任务。需要注意的是,start()方法只能被调用一次,多次调用会导致IllegalThreadStateException异常。
run()方法定义了线程执行的具体任务代码。它是每个线程类必须覆写的方法,用于放置需要并行处理的逻辑代码。
如果直接在主线程中调用某个线程对象的run()方法,那么run()中的代码将不会在新的线程中执行,而是作为普通方法在当前调用它的线程(通常是主线程)中顺序执行,这意味着没有实现多线程并行处理,程序仍按单线程的顺序执行路径进行。
总结来说,start()方法用于启动线程,让JVM负责后续的线程调度和run()方法的调用,从而实现多线程并发;而直接调用run()方法仅是执行一段代码,不涉及新线程的创建与调度,不会达到多线程并行处理的效果。
如果大家需要视频版本的讲解,欢迎关注我的B站: