Runnable接口新理解:线程与线程任务的关系

本文深入探讨了Java中Runnable接口的作用,指出其实质是将线程与线程任务解耦。通过实现Runnable接口,可以创建线程并执行特定任务,而启动线程则必须通过Thread的start()方法。了解这一概念有助于清晰区分线程和线程任务的本质区别。
摘要由CSDN通过智能技术生成

Runnable接口新理解:线程与线程任务的关系

首先来回顾一下java多线程的最基本的知识:

1、Runnable接口介绍

@FunctionInterface 
public interface Runnable{ 

    public void run(); 

}

Runnable接口只定义了一个run()方法,也是一个函数式接口,可以通过实现它来创建线程。

2、创建线程的几种方式

Java 提供了三种创建线程的方法:

  • 通过实现 Runnable 接口
    • 实现Runnbale接口,重写run()方法,然后通过new Thread(Runnable target, String tName)来创建一个线程,将自己实现的Runnable对象传入参数target,指定一个线程名,再调用Thread的start()方法来启动线程。
  • 通过继承 Thread 类本身
    • 继承Thread,重写run()方法,调用start()方法启动线程。
  • 通过 Callable 和 Future 创建线程
    • 1. 创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法将作为线程执行体,并且有返回值。
    • 2. 创建 Callable 实现类的实例,使用 FutureTask 类来包装 Callable 对象,该 FutureTask 对象封装了该 Callable 对象的 call() 方法的返回值。
    • 3. 使用 FutureTask 对象作为 Thread 对象的 target 创建线程,调用start()方法启动线程。
    • 4. 调用 FutureTask 对象的 get() 方法来获得子线程执行结束后的返回值。

Runnable接口本质是什么?

以上两点是线程的基本知识,在上述三种创建线程的方式中都有一个共同点,就是都要调用Thread的start()方法来启动线程。那么Runnable接口的作用到底是什么?是解耦——将线程与线程任务进行解耦。run()方法内的逻辑实际上只是线程要执行的任务,实现Runnable接口的子类并不具备启动一个线程的能力,JVM中要启动线程必须通过调用Thread的start()方法,如果直接调用run()方法则只是一种普通的方法调用。

所以,在学习多线程技术的时候要分清楚:什么是线程,什么是线程任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值