美文网首页
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 创建新线程的唯一方法

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