Java线程中的run()和start()区别

简介: Java线程中的run()和start()区别

1 问题描述

为了更好的利用cpu资源,一般采用多线程的方式去实现:也就是在一个程序在运行时,不仅仅是只有一个线程在运行。那么该如何真正的实现多线程运行呢?

2 问题分析

首先我们得有两个线程,以下代码是通过继承Thread类的方式创建的两个线程,可以看出两者都是重写了run:

那么问题来了,如果要启动两个线程,达到并发的效果呢?run()or start()?

3 解决方案

第一次尝试使用run方法启动两个线程,控制台内先打印了1000次的“线程1”,然后打印了1000次“线程2”(图1)。

第二次尝试使用start方法启动两个线程,控制台随机打印了“线程1”与“线程2”(图2)。

1

2

很明显,start()达到了两个线程运行的效果。

使用run(),仅当作了一个方法被调用,程序中依旧只有一个线程(主线程)。

使用start()启动线程时,将自动调用run()方法,它不需要等待run()中的代码执行完毕,这是由于jvm的内存机制规定的。注:run()方法必须是public访问权限,返回值为void

事实上,使用start方法启动线程才是真正实现了多线程运行。

多线程原理:分时利用CPU,宏观上让所有线程一起执行,也叫并发。

4 总结

run()  只是调用了一个普通方法,并没有启动另一个线程,程序还是会按照顺序执行相应的代码。

start() 则表示,重新开启一个线程,不必等待其他线程运行完,只要得到cup就可以运行该线程。

如果想要实现多线程并行的效果,那么则采用start方法去调用。

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