创建新线程的几个主要方法

134 阅读2分钟

这里面主要介绍了创建新线程的几个方法,不讨论实现线程有多少种的方法

实现 Runnable 接口

public class TestRunnableInterface implements Runnable{

    @Override
    public void run() {
        System.out.println("我创建了一个新的线程!");
    }

    public static void main(String[] args) {

        TestRunnableInterface runnable = new TestRunnableInterface();

        Thread thread = new Thread(runnable);

        thread.start();

    }
}

实现 Runnable接口后,需要重写它的 run()方法,并在Runnable方法中实现自己的操作,具体实现什么,看自己的需求。后面我们需要创建一个线程,把我们实现Runnable接口的类给传入进去,然后调用 start()方法,方可运行

继承 Thread 类

public class TestThreadExtends extends Thread{

    @Override
    public void run() {
        System.out.println("TestThreadExtends 执行了!");
    }

    public static void main(String[] args) {

        TestThreadExtends testThreadExtends = new TestThreadExtends();

        testThreadExtends.start();

    }
}

继承 Thread方法后,跟上面的一样,需要重写 run(),并实现自己想要执行的操作。后面我们则不需要创建一个新的线程类来辅助创建线程执行了,只要使用继承 Thread的这个类,直接调用 start()方法,就可以使用了

匿名内部类创建一个新的线程

public class AnonymityThread{

    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名内部类好像也运行了!");
            }
        });
        thread.start();
    }
}

上面的匿名实现的方法,是不是看着挺容易实现的,而且还不用新创建一个类,是不是意味着好呢?其实这样不太易于重复使用同一个功能,如果你需要再使用,那么就得重新写同样的代码,需要使用的次数多,也就冗余的代码量会很多

其它能创建新线程的类,就不多赘述了,有 Callable创建新线程,有线程池创建新线程,具体方法很多

回到前面的代码,既然有几种简单实现线程的方法,那么实现 Runnable接口和继承 Thread类,哪个更好?

我见到过的有以下几点:

  • 实现与运行分开,实现Runnable接口实现你需要的功能操作,新建Thread类来负责运行(仅运行),而不执行其它操作

  • 每次需要重复执行,继承 Thread的类,都需要重新创建一个对象,来执行任务,如果数量够多,性能开销会比较大。如果实现的是 Runnable接口,那么只要把这个实现接口的类传入线程池,就可以减少大量的性能开销

  • 扩展性,继承只能单继承,继承 Thread类的,后面就不能继承新的类了。而实现 Runnable接口的类,后面还可以继承别的类,扩展性相对好一些


欢迎大家关注下个人的「公众号」:独醉贪欢