Java高级应用—线程的三种创建方式

By | 2017年 2月 14日

线程和进程应该都听说过,Thread,Process,这里就不介绍概念了,基本的Java线程模型有Thread类,Runnable接口,Callable接口和Future接口等,这些线程模型都是面向对象的。

1. 继承Thread类

其中Thread类的run(),方法是线程中最重要的方法,用于执行线程要完成的任务,我们每次创建一个线程都要重写run方法,当然还有start()方法负责启动。

下面继承Thread类

执行结果:

2. 实现Runable接口

Runnable接口用于标识某个Java类可否作为线程类,该接口只有一个抽象方法run,用于执行线程中的任务。一个尅实现Runnable接口后,并不代表该类是个“线程”类,不能直接启动线程,必须通过Thread类的实例来创建并启动线程。

通过Runnable接口创建并启动线程的步骤:

  • (1)、定义一个雷实现Runnable接口,并实现该接口中的run方法;
  • (2)、创建一个Thread类的实例,并将Runnable接口的实现类所创建的对象作为参数传入Thread类的构造方法中;
  • (3)、调用Thread对象的start方法启动该线程。

代码实现:

结果

3. 使用Callable和Future接口

Callable接口提供一个call方法作为线程的执行体,call方法比run方法功能更强大,call方法可以有返回值,也可以声明抛出异常,Future接口用来接收Callable接口中call方法的返回值,Future接口提供一个FutureTask实现类,该类同时实现了Future和Runnable两个接口,因此可以作为Thread类的target参数,使用Callable和Future接口的最大优势在于可以在线程执行完任务之后获取执行结果。

使用Callable和Future接口创建并启动线程的步骤:

  • (1)、创建Callable接口的实现类,并实现call方法,该方法将作为线程的执行体,并具有返回值,然后创建Callable实现类的实例。
  • (2)实现FutureTask类来包装Callable对象,在FutureTask对象中封装了Callable对象的call方法的返回值
  • (3)使用FutureTask对象作为Thread对象的target创建并启动新线程
  • (4)调用FutureTaks对象的get方法来获得子线程执行结束后的返回值

实例代码

结果

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注