在 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方法的区别详细介绍
基础教程推荐
- 关于idea2022.2 闪退的问题 2023-04-12
- Springboot启动后立即某个执行方法的四种方式 2022-12-02
- JSP的Cookie在登录中的使用 2023-07-31
- Java定时器例子_动力节点Java学院整理 2024-02-01
- Java项目Guava包 HashMultimap使用及注意事项 2022-11-14
- java性能优化之分代回收 2023-02-19
- Java利用LocalDate类实现日历设计 2023-03-15
- Java postgresql数组字段类型处理方法详解 2023-06-17
- XSS测试语句大全 2023-12-09
- EL调用Java方法_动力节点Java学院整理 2024-01-21
