多线程的创建方式

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() 方法。

        

以上是关于多线程的创建方式的主要内容,如果未能解决你的问题,请参考以下文章

JAVA多线程用实现Runnable接口的方式创建线程

多线程创建方式

多线程(六):线程池

多线程(六):线程池

锁和多线程:线程创建3种方式

多线程的实现方式