Thread 类中的start() 和 run() 方法有什么区别

简介: 【8月更文挑战第9天】Thread 类中的start() 和 run() 方法有什么区别

在Java多线程编程中,Thread类是创建和管理线程的核心。关于Thread类中的start()run()方法,它们在目的、执行方式以及线程状态影响等方面存在明显的区别,具体分析如下:

  1. 目的

    • start():用于启动一个新的执行线程。
    • run():定义了线程的具体执行任务。
  2. 执行方式

    • start():当调用start()方法时,系统会为这个线程分配必要的资源并创建一个新的调用栈,然后由JVM将线程的run()方法置于这个调用栈中,在新线程中异步执行。
    • run():直接调用run()方法,其实只是在当前线程同步执行这个方法体中的代码,并不会启动新线程。
  3. 线程状态影响

    • start():调用后线程从NEW状态变为RUNNABLE状态,准备执行。
    • run():不会改变线程的状态。
  4. 使用限制

    • start():只能对一个线程调用一次,再次调用会导致IllegalThreadStateException异常。
    • run():可以被多次调用,但在多线程编程中通常只作为普通方法使用。
  5. 异步同步

    • start():异步执行,主线程不需要等待这个新线程完成就会继续自己的任务。
    • run():同步执行,调用它的线程会阻塞直到run()方法执行完毕。

总的来说,start()run()方法在功能上有明显的区别。start()是用来启动新线程的,而run()则是定义了线程要执行的任务。在实际编程中,应当正确使用这两个方法,以确保多线程程序的正确和高效运行。

目录
相关文章
|
29天前
|
调度
Runnable接口的 run() 方法和start()方法
Runnable接口的 run() 方法和start()方法
8 0
Thread 类中的 start () 和 run () 方法的区别
Thread 类中的 start () 和 run () 方法的区别
56 0
|
4月前
|
Java
多线程中的run方法和start方法有什么区别?
多线程中的run方法和start方法有什么区别?
|
12月前
Thread 类的基本用法
比较推荐:使用 lambda 表达式创建线程的时候不用重写 run 方法。 不需要显式重写run方法的原因是因为线程的目标方法已经在Lambda表达式中定义了。Lambda表达式是一种用于创建匿名函数的语法糖,它可以将一个方法(或一段代码块)包装为一个函数对象。当您使用Lambda表达式创建线程时,Lambda表达式的内容会被视为线程执行的任务,这个任务会自动成为run方法的实现。
62 0
|
Java 调度
Thread类的方法
Thread类的方法
35 0
|
安全 Java API
为什么启动线程不直接调用run(),而要调用start(),如果调用两次start()方法会有什么后果
1位工作6年的小伙伴去某里P6一面,被问到这样一道面试题,说,为什么启动一个线程不直接调用run()方法,而要调用start()方法来启动,如果调用两次start()会有什么后果?
92 0
|
Java
Java线程中的run()和start()区别
Java线程中的run()和start()区别
77 0
|
调度
线程 --- Thread 类的基本用法 old
线程 --- Thread 类的基本用法 old
119 0
线程 --- Thread 类的基本用法 old
|
Java
Java Thread 中run()方法和start()方法的区别
Java Thread 中run()方法和start()方法的区别
91 0