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

欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

1 问题描述

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

2 问题分析

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

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

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

3 解决方案

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

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

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

1

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

2

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

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

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

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

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

4 总结

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

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

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

更多精彩文章:

 

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

温馨提示:点击页面右下角“写留言”发表评论,期待您的参与!期待您的转发!