【JAVA】线程的run()和start()有什么区别?

简介: 【JAVA】线程的run()和start()有什么区别?

f0877679abd54b028117c4c04f96d16a.png


前言

多线程编程是Java中一个重要的概念,能够有效地提高程序的性能和响应性。在理解多线程时,run()start() 方法是关键的概念,它们决定了线程的行为和执行方式。深入了解这两个方法的区别,对于正确地设计和使用多线程是至关重要的。

正文

在Java中,线程的 run()start() 是与多线程编程相关的两个方法,它们有着不同的作用和用法。

  1. run() 方法:
  • run() 方法是 Thread 类的一个普通方法,用于定义线程的主体逻辑。当直接调用 run() 方法时,该方法会在当前线程的上下文中执行,而不会创建新的线程。
  • 直接调用 run() 方法,不会实现多线程的并发执行,而只是在当前线程中按照顺序执行 run() 方法的内容。
public class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 线程的主体逻辑
        System.out.println("Running in thread: " + Thread.currentThread().getName());
    }
}
 
public class Main {
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        myRunnable.run(); // 在当前线程中执行 run() 方法
    }
}
  • start() 方法:

3.start() 方法是 Thread 类的一个方法,用于启动一个新的线程。当调用 start() 方法时,会创建一个新的线程,并在新线程的上下文中执行 run() 方法的内容。

4.直接调用 start() 方法会导致新线程的创建和执行,实现多线程并发执行。

public class MyThread extends Thread {
    @Override
    public void run() {
        // 线程的主体逻辑
        System.out.println("Running in thread: " + Thread.currentThread().getName());
    }
}
 
public class Main {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start(); // 启动一个新的线程,执行 run() 方法
    }
}

区别总结:

  • run() 方法是定义线程主体逻辑的普通方法,当直接调用时,它在当前线程的上下文中执行,而不会创建新的线程。
  • start() 方法是启动一个新线程的方法,当调用时,它会创建一个新的线程,并在新线程的上下文中执行 run() 方法的内容,实现多线程并发执行。
  • 直接调用 run() 方法不会创建新线程,只是在当前线程中按顺序执行 run() 方法的内容,不具备多线程的特性。

在使用多线程时,通常应该调用 start() 方法来启动新线程,以实现并发执行,而不是直接调用 run() 方法。

结语

在Java中,run() 方法和 start() 方法代表着多线程编程的两种不同方式。run() 作为线程的主体逻辑定义,当直接调用时在当前线程中执行;而 start() 用于启动新线程,创建新的执行上下文,并在其中执行 run() 方法,实现多线程的并发执行。正确使用这两个方法是编写高效、可靠多线程代码的关键。在设计多线程应用时,请根据需求选择适当的方式,确保线程安全和良好的性能。希望通过对 run()start() 的深入理解,你能够更加自信和熟练地处理多线程编程的挑战。

相关文章
|
5天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
18 2
|
6天前
|
Java 调度
Java-Thread多线程的使用
这篇文章介绍了Java中Thread类多线程的创建、使用、生命周期、状态以及线程同步和死锁的概念和处理方法。
Java-Thread多线程的使用
|
4天前
|
Java 数据中心 微服务
Java高级知识:线程池隔离与信号量隔离的实战应用
在Java并发编程中,线程池隔离与信号量隔离是两种常用的资源隔离技术,它们在提高系统稳定性、防止系统过载方面发挥着重要作用。
5 0
|
2月前
|
存储 监控 Java
Java多线程优化:提高线程池性能的技巧与实践
Java多线程优化:提高线程池性能的技巧与实践
64 1
|
4天前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
12天前
|
Java Spring
spring多线程实现+合理设置最大线程数和核心线程数
本文介绍了手动设置线程池时的最大线程数和核心线程数配置方法,建议根据CPU核数及程序类型(CPU密集型或IO密集型)来合理设定。对于IO密集型,核心线程数设为CPU核数的两倍;CPU密集型则设为CPU核数加一。此外,还讨论了`maxPoolSize`、`keepAliveTime`、`allowCoreThreadTimeout`和`queueCapacity`等参数的设置策略,以确保线程池高效稳定运行。
72 10
spring多线程实现+合理设置最大线程数和核心线程数
|
20天前
|
Java 数据库 Android开发
一个Android App最少有几个线程?实现多线程的方式有哪些?
本文介绍了Android多线程编程的重要性及其实现方法,涵盖了基本概念、常见线程类型(如主线程、工作线程)以及多种多线程实现方式(如`Thread`、`HandlerThread`、`Executors`、Kotlin协程等)。通过合理的多线程管理,可大幅提升应用性能和用户体验。
35 15
一个Android App最少有几个线程?实现多线程的方式有哪些?
|
6天前
|
Python
5-5|python开启多线程入口必须在main,从python线程(而不是main线程)启动pyQt线程有什么坏处?...
5-5|python开启多线程入口必须在main,从python线程(而不是main线程)启动pyQt线程有什么坏处?...
|
22天前
|
Java 数据库 Android开发
一个Android App最少有几个线程?实现多线程的方式有哪些?
本文介绍了Android应用开发中的多线程编程,涵盖基本概念、常见实现方式及最佳实践。主要内容包括主线程与工作线程的作用、多线程的多种实现方法(如 `Thread`、`HandlerThread`、`Executors` 和 Kotlin 协程),以及如何避免内存泄漏和合理使用线程池。通过有效的多线程管理,可以显著提升应用性能和用户体验。
38 10
|
3天前
|
NoSQL 网络协议 Unix
1)Redis 属于单线程还是多线程?不同版本之间有什么区别?
1)Redis 属于单线程还是多线程?不同版本之间有什么区别?
8 0
下一篇
无影云桌面