首页 > 其他分享 >线程的run()和start()有什么区别?

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

时间:2024-09-28 19:49:04浏览次数:8  
标签:run start 线程 多线程 方法 public

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() 方法:

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

直接调用 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() 的深入理解,你能够更加自信和熟练地处理多线程编程的挑战。

标签:run,start,线程,多线程,方法,public
From: https://www.cnblogs.com/java-six/p/18438300

相关文章

  • Spring--boot自动配置原理案例--阿里云--starter
    Spring–boot自动配置原理案例–阿里云–starter定义这个starter的作用是它可以将阿里云的工具类自动放入IOC容器中,供人使用。我们看一看构建starter的过程,其实就是在atuoconfigure模块中加入工具类,然后写一个配置类在其中将工具类放入IOC容器,之后在starter中引入atuoconf......
  • [Java并发]线程的并行等待
    在Java中,线程的并行等待(即等待多个线程并行执行完毕)通常可以通过以下几种方式来实现。我们要确保多个线程能够并行执行,并在所有线程执行完毕后再继续后续的操作。这种场景通常可以用在并发任务的协调中。以下是几种常见的实现方式:1.使用Thread.join()方法join()方法是最直......
  • Linux线程-POSIX信号量与锁以及条件变量
    POSIX信号量POSIX没有元素这个概念相比于SYSTEM-V更简洁,POSIX不一定适用老版本;二者都是系统范畴,都需要手动删除,POSIX相关函数属于线程库,所有编译时需要末尾加上-lpthread选项POSIXPOSIX有名信号量主要用于进程间通信创建成功后,器特殊文件存放路径:/dev/shm/POSIX无名......
  • Linux多线程复制目录
    比如有一个目录a需要复制:mkdiratoucha/amkdira/btoucha/b/ctreeaa├──a└──b└──c将其复制为目录d只需要用find找出目录下所有的文件,然后用gnu-parallel开多线程逐个复制即可:mkdirdcdafind.-typef|parallel-j4cp--parents{}../dtre......
  • Pruning Large Language Models with Semi-Structural Adaptive Sparse Training
    本文是LLM系列文章,针对《PruningLargeLanguageModelswithSemi-StructuralAdaptiveSparseTraining》的翻译。通过半结构化自适应稀疏训练修剪大型语言模型摘要1引言2相关工作3方法4实验5结论摘要大型语言模型(LLM)在各种复杂任务中的巨大成功在很......
  • Java多线程
    进程与线程一个程序有一个进程一个进程包含多个线程(必须有一个主线程)查看线程Threadt=Thread.currentThread();//获得当前线程线程创建方式1.继承Thread类,重写run方法,调用start方法2.实现Runnable接口,重写run方法,创建Thread对象newThread(Runnable),调用start方法......
  • 多线程
    线程和进程的区别进程是正在运行的程序的实例,进程中包含了线程,每个线程执行不同的任务不同的进程使用不同的内存空间,在当前进程下所有线程可以共享内存空间线程更加轻量,线程切换比进程切换开销低 并行和并发的区别在多核cpu下并发是同一时间应对多件事情,......
  • 三篇文章速通JavaSE到SpringBoot框架 (中) IO 进程线程 网络编程 XML MySQL JDBC相关
    文章目录IOfile类的作用I/O的作用将上篇文章综合项目使用IO流升级所需知识点进程线程创建线程的三种方式网络编程网络编程介绍IP地址端口号网络通信协议网络通信协议的分层演示代码XMLXML的作用是什么?xml特点注解什么是注解?注解的使用注解的重要性注解的使用实例M......
  • 多线程下单例模式延迟初始化的实现
    多线程下单例模式延迟初始化的实现前言synchronized修饰方法双重检查锁定双重检查锁定的问题基于volatile的双重锁定方案类初始化总结前言在程序开发中,存在一些开销较高的资源,例如数据库连接等,我们使用单例模式保证其唯一并且进行延迟初始化,只有当使用的时候才进行......
  • C++线程同步之条件变量
    条件变量需要和互斥量配合起来使用,C++11提供了两种条件变量:condition_variable:需要配合std::unique_lockstd::mutex进行wait操作,也就是阻塞线程的操作。condition_variable_any:可以和任意带有lock()、unlock()语义的mutex搭配使用,也就是说有四种:std::mutex:独占的非递归互斥锁......