Java 创建新线程的唯一方法

2019-12-30  本文已影响0人  qyfl

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 类会对代码以后的扩展掣肘。
上一篇 下一篇

猜你喜欢

热点阅读