在 Java 中,我们可以通过 java.lang.Thread
- 什么是线程
在 Java 中,我们可以通过 java.lang.Thread 类创建线程。线程是一个可以独立运行的子任务。与程序中的其他子任务不同,线程在操作系统层面上是一种独立的执行单元。在单个应用程序内,多个线程可以同时执行,每个线程都有自己的栈和局部变量,线程之间可以共享堆上的变量。由于线程在同时执行,因此在多线程编程中需要引入线程同步、锁和互斥等概念来保证数据的一致性和线程安全。
Java 线程的创建和运行分为两个步骤,分别是:
- 通过继承
java.lang.Thread类或实现java.lang.Runnable接口的方式创建线程; -
调用线程对象的
start()方法启动线程。 -
start()方法和run()方法的区别
start() 方法和 run() 方法都是线程的启动方法,但是它们的执行效果是不同的。
-
start()方法用于启动一个新线程,该线程会在新的 JVM 栈中独立运行。start()方法调用后立刻返回,新线程在 JVM 中独立运行,并且就绪线程池中的其它线程可能会在新线程运行之前执行。 -
run()方法是线程体的逻辑代码,在start()方法被调用后,JVM 会自动调用该方法。run()方法不会启动一个新的线程,而是在当前线程中执行。因此,如果直接调用run()方法,它会在当前线程中执行,不会启动新的线程。
下面是一个例子:
public class ThreadTest implements Runnable {
@Override
public void run() {
System.out.println("Thread started!");
}
public static void main(String[] args) {
Thread thread = new Thread(new ThreadTest());
thread.start(); // 启动新线程
// thread.run(); // 不会启动新线程,直接在当前线程中执行
}
}
在上面的例子中,我们创建了一个实现 java.lang.Runnable 接口的类 ThreadTest。在 run() 方法中,我们打印了一条消息。在 main() 方法中,我们创建一个新的线程对象,并传入实例化的 ThreadTest 类。当我们调用 thread.start() 启动线程后,JVM 会自动调用 ThreadTest 类中的 run() 方法,输出 "Thread started!"。
如果我们取消注释掉 thread.run(),直接在当前线程中执行,程序只会输出 "Thread started!",并不会启动新的线程。
- 总结
在 Java 线程中,start() 方法和 run() 方法是线程的启动方法,但是它们的执行效果是不同的。start() 方法会启动一个新的线程,而 run() 方法不会启动新线程,只会在当前线程中执行。
在实际开发中,我们应该优先使用 start() 方法来启动线程,避免使用 run() 方法直接在当前线程中执行,从而提高程序的并发处理能力。
本文标题为:java 线程中start方法与run方法的区别详细介绍
基础教程推荐
- zookeeper+Springboot实现服务器动态上下线监听教程详解 2023-01-29
- Java中Stringbuild,Date和Calendar类的用法详解 2024-01-14
- Java设计模式之状态模式State Pattern详解 2023-07-01
- 教你使用eclipse 搭建Swt 环境的全过程 2023-08-11
- java面试try-with-resources问题解答 2023-03-10
- java – SQLException:没有这样的列 2023-10-30
- Java布局管理器使用方法 2023-12-16
- Java实战之在线寄查快递系统的实现 2022-11-08
- java实现两张图片2D翻转动画效果 2023-04-22
- SpringBoot浅析安全管理之高级配置 2023-04-12
