千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 多线程start和run方法有什么区别?

多线程start和run方法有什么区别?

来源:千锋教育
发布人:xqq
时间: 2023-10-14 21:10:34 1697289034

一、启动方式

start()方法:用于启动一个新线程,创建一个新的线程并让其执行run()方法中的代码。run()方法:普通的方法调用,直接在当前线程中顺序执行run()方法中的代码,并不会启动新的线程。

二、执行时机

start()方法:调用start()方法后,会立即返回,并在新线程中异步执行run()方法中的代码。run()方法:直接调用run()方法时,会在当前线程中同步执行run()方法中的代码,直到run()方法执行完毕后才会继续执行后续代码。

三、线程调度

start()方法:启动新线程后,线程调度器会根据系统的调度策略分配CPU时间片,并在多个线程之间切换执行。run()方法:直接调用run()方法时,不会进行线程调度,代码在当前线程中按顺序执行,没有多线程的效果。

四、并发性

start()方法:启动新线程后,可以实现多个线程的并发执行,提高系统的吞吐量和响应性能。run()方法:直接调用run()方法时,代码在单个线程中串行执行,没有并发性,不会提高系统的处理能力。

五、异常处理

start()方法:启动新线程后,如果在run()方法中发生异常而没有进行处理,异常会被线程捕获,并交由线程的UncaughtExceptionHandler处理。run()方法:直接调用run()方法时,异常会被普通的try-catch块捕获,异常处理与普通方法调用相同。

六、继承Thread类和实现Runnable接口

start()方法:如果使用继承Thread类创建线程,通过调用start()方法启动线程。run()方法:如果使用实现Runnable接口创建线程,需要将Runnable对象传递给Thread类的构造函数,并在Thread对象上调用start()方法来启动线程。

七、单继承限制

start()方法:由于Java是单继承机制,如果已经继承了其他类,就无法再继承Thread类,限制了使用start()方法创建线程的灵活性。run()方法:通过实现Runnable接口创建线程可以避免单继承限制,使得代码更具扩展性和可维护性。

八、资源分配

start()方法:启动线程后,每个线程都会有自己的程序计数器、虚拟机栈、本地方法栈和堆内存等资源。run()方法:直接调用run()方法时,所有线程共享调用该方法的线程的资源,没有为新线程分配额外的资源。

延伸阅读

多线程start和run方法

创建线程对象:首先需要创建一个Thread类的对象,可以通过直接实例化Thread类或者继承Thread类创建自定义的线程类。重写run()方法:在创建线程对象后,需要重写Thread类中的run()方法。run()方法是线程的主体,包含了线程的具体执行逻辑。调用start()方法:一旦线程对象创建并且run()方法被重写,就可以调用线程对象的start()方法来启动线程。start()方法会在新的线程上调度run()方法的执行。线程状态转换:调用start()方法后,线程会进入就绪状态,并等待系统调度来执行run()方法。当系统调度到该线程时,它会进入运行状态,并开始执行run()方法中的代码。
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT