美文网首页
Java 创建新线程的唯一方法

Java 创建新线程的唯一方法

作者: qyfl | 来源:发表于2019-12-30 23:27 被阅读0次

Java 创建新线程有很多种方式,归根到底只有一种方式。实现 Thread 的 run 方法。

方式1、通过 Runnable 方式实现

public class RunnableStyle implements Runnable {
    public static void main(String[] args) {
        Thread thread = new Thread(new RunnableStyle());
        thread.start();
    }

    @Override
    public void run() {
        System.out.println("使用 Runnable 实现线程");
    }
}

方式2、通过 Thread 方式实现

public class ThreadStyle extends Thread {
    @Override
    public void run() {
        System.out.println("使用 Thread 实现线程");
    }

    public static void main(String[] args) {
        new ThreadStyle().run();
    }
}

实现原理

以上两种方式的本质都是通过 Thread 中的 run 方法实现的。

Thread 类 target Thread 类 run

上面两张图是 Thread 类的源码,里面是 run 方法的实现。
第一种实现方式就是将 Runnable 对象传到 target 里,然后运行传进去 Runnable 对象中的 run 方法。
第二种实现方式是重写 Thread 类中的 run 方法。

所以归根到底,新建线程的方法就是实现 Thread 类的 run 方法。

总结

既然有两种方法可以新建线程,那么那种好呢?应该是 Runnable 的方式。理由:

  1. 从解耦的角度,run 方法里具体的任务应该和线程的新建运行应该是解耦的,任务是任务,线程是线程。
  2. 如果继承了 Thread 类,每次新建任务就需要新建一个线程,而新建线程的代价是相较于 Runnable 方式来说比较大。Runnable 可以结合线程池的方式更为合理的使用资源。
  3. 类继承 Thread 之后,Java 又不允许多继承。那么继承 Thread 类会对代码以后的扩展掣肘。

相关文章

  • 线程池的使用

    Java线程池 前言 平时使用Java线程时,习惯于直接new Thread来创建一个线程,这种创建线程的方法随手...

  • Java并发编程基础教程—并发基础(二)

    Java线程 3.1线程的创建和运行 方法1 方法2 Java8 使用lambda表达式Runnable r = ...

  • 创建线程的3种方法

    转载 Java创建线程的3中方法 继承Thread类创建线程类 通过Runnable接口创建线程类 通过Calla...

  • 3、并发编程-Java线程

    并发编程 Java线程 创建和运行线程 查看线程 线程API 线程状态 创建和运行线程 方法一,直接使用new T...

  • java多线程

    java多线程 [TOC] 创建线程 直接调用Thread类或Runnable类的run方法并不会 创建线程,只会...

  • java 创建线程的方法

    java 创建线程的方法 Java通过Executors提供四种线程池,分别为: newCachedThreadP...

  • 线程的基本使用

    线程的创建 java创建线程有两种方法​​ 创建Thread的子类 实现Runnable接口 Thread和Run...

  • 线程基础

    ** java中创建线程的方法** 继承自java.lang.thread类,并重写run方法(线程运行时要做的事...

  • Java学习总结——多线程编程

    Java多线程编程 一、创建线程的方法一: 继承:extends Thread 重写run()方法 举个栗子?: ...

  • C++主线程调用Java方法

    1. C++ 全局调用Java方法 1.1 C++主线程调用Java方法 在 Android C++多线程-创建子...

网友评论

      本文标题:Java 创建新线程的唯一方法

      本文链接:https://www.haomeiwen.com/subject/jnjvoctx.html