苏州专业网站设计,怎么查网站备案信息,制作网站一般多少钱,河北省建设工程管理信息网官网文章目录 前言回顾run() 方法 vs start() 方法run()方法start()方法 直接调用 run() 方法的影响直接调用 run() 方法调用 start() 方法 示例解析结论个人简介 前言
在Java中#xff0c;多线程编程是一个重要的概念#xff0c;尤其是在处理并发任务时。线程是Java中实现多线程… 文章目录 前言回顾run() 方法 vs start() 方法run()方法start()方法 直接调用 run() 方法的影响直接调用 run() 方法调用 start() 方法 示例解析结论个人简介 前言
在Java中多线程编程是一个重要的概念尤其是在处理并发任务时。线程是Java中实现多线程的一种方式。在使用线程时理解 run() 方法和 start() 方法之间的区别是至关重要的。本文将深入探讨如果直接调用线程的 run() 方法会发生什么。先说结论直接调用 run() 方法不会启动一个新的线程它只是普通方法调用代码在当前线程中同步顺序执行。
回顾
Java 提供了继承 Thread 类、实现Runnable接口两种方式来实现线程无论使用哪种方式都需要重写 run() 方法这是线程执行的入口点。启动一个线程通常使用 Thread 对象的 start() 方法该方法会触发线程的启动并最终调 用run() 方法。
run() 方法 vs start() 方法
run()方法
run()方法包含了线程要执行的代码。直接调用run()方法不会启动一个新线程它只是在当前线程中执行run()方法体中的代码。换句话说直接调用run()方法相当于调用一个普通的方法没有并发行为。
start()方法
start()方法会创建一个新的线程并在新的线程中执行run()方法。调用start()方法会使线程从“新建”状态变为“就绪”状态等待CPU调度。
直接调用 run() 方法的影响
为了更好地理解直接调用 run() 方法的影响考虑以下示例代码
class MyThread extends Thread {public void run() {System.out.println(Thread is running);}
}public class Main {public static void main(String[] args) {MyThread thread new MyThread();// 直接调用run()方法thread.run();// 调用start()方法thread.start();}
}在上述代码中thread.run() 和 thread.start() 的行为是完全不同的。
直接调用 run() 方法
当thread.run()被调用时输出“Thread is running”。这段代码在主线程中执行没有启动新的线程。此时主线程和线程对象的run()方法体是同步顺序执行的。
调用 start() 方法
当thread.start()被调用时输出“Thread is running”。这段代码在一个新线程中执行与主线程并发运行。主线程和新启动的线程是同时执行的体现了多线程的并发特性。
示例解析
通过以下代码示例可以更清晰地看出区别
class MyRunnable implements Runnable {public void run() {for (int i 0; i 5; i) {System.out.println(Runnable running i);}}
}public class Main {public static void main(String[] args) {MyRunnable myRunnable new MyRunnable();Thread thread new Thread(myRunnable);// 直接调用run()方法myRunnable.run();// 调用start()方法thread.start();}
}// 输出
Runnable running 0
Runnable running 1
Runnable running 2
Runnable running 3
Runnable running 4
Runnable running 0
Runnable running 1
Runnable running 2
Runnable running 3
Runnable running 4前五行输出是 myRunnable.run() 直接调用产生的后五行是 thread.start() 启动的新线程产生的。
结论
直接调用 run() 方法不会启动一个新的线程它只是普通方法调用代码在当前线程中同步顺序执行。而调用 start() 方法则会启动一个新的线程并在该线程中执行 run() 方法的代码。
个人简介 你好我是 Lorin 洛林一位 Java 后端技术开发者座右铭Technology has the power to make the world a better place. 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。 作为一个 Java 后端技术爱好者我不仅热衷于探索语言的新特性和技术的深度还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。 在我的博客上你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法以帮助你更好地掌握Java编程。 我鼓励互动和建立社区因此请留下你的问题、建议或主题请求让我知道你感兴趣的内容。此外我将分享最新的互联网和技术资讯以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进一起探讨技术世界的无限可能性。 保持关注我的博客让我们共同追求技术卓越。