多线程的创建方式
Posted Java技术讲堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程的创建方式相关的知识,希望对你有一定的参考价值。
一、走进多线程
在开始讲多线程之前,我想请大家先看一段代码。
这段代码相信大家都能看的懂,目的就是求 1-10 所有整数相加。程序的运行状况就是由 1 一直加到 10,最后输出结果。大家试想一下,现在就 10 个数看不出什么,但是如果有一万个数、十万个数、百万个数或者更多呢?这个时候如果还是用这个方式运行程序,那么程序的执行时间将会很长很长。如果可以缩短程序的执行时间呢?除了再算法逻辑上优化以外,还可以用多线程的方式去做。
那什么是线程,什么又是进程?我先用比较官方的方式给大家介绍一下。
1)线程是CPU独立运行和独立调度的基本单位;
2)线程是程序执行的最小单位
3)一个进程内可以有多个线程,线程是进程的一部分,线程可以看做是轻量级的进程。
有些人会觉得这个很不容易理解,那我再用通俗易懂的方式给大家讲解一下两者是什么。
线程可以比喻成人,一个线程就是一个人。上面那个例子的代码就是运行一个主线程(main)去计算 1 到 10 所有整数的和。就相当于是让一个人去计算 1 到 10 的和。
进程可以理解为处理某件事或某些事,运算 1 到 9 所有整数的和这件事就是一个进程。
进程中可以存在一个线程也可以存在多个线程。
那么试想一下,如果我在计算 1 到 10 的和时用两个线程去做,每个线程计算五个数,这样不就减少了程序的运行时间了嘛。
二、开启多线程:
实现多线程的方式由两种:一个是继承 Thread 类,一个是实现Runnable接口。
还是上面的例子,我们两种多线程的方式实现以下。
1、继承 Thread 类:
步骤:
1)、定义一个Thread类子类;
2)、重写Thread类中的run方法;
3)、创建Thread子类对象;
4)、通过子类对象调用start方法开启线程;
代码如下:
运行结果:55
2、实现 Runnable 接口:
步骤:
1)、定义 Runnable 接口实现类。
2)、实现接口中的run方法。
3)、通过Thread类创建线程对象,并将 Runnable 接口的实现类对象作为 Thread 类的构造函数的参数传递进去。
4)、调用线程对象的start()方法开启线程。
代码如下:
运行结果:55
不管是实现 Runnable 接口还是继承 Thread 类的方式创建对象,线程的实际逻辑都是写在 run() 方法中的。那直接调用 run() 方法能开启线程吗?答案是不能,因为调用 run() 方法方式就是一个普通的方法调用,而调用 start() 方法的作用是让 Java 虚拟机创建线程,并由虚拟机执行此线程的 run() 方法。
以上是关于多线程的创建方式的主要内容,如果未能解决你的问题,请参考以下文章