Java创建线程的三种形式的区别以及优缺点

1.实现Runnable,Callable

Callable接口里定义的方法有返回值,可以声明抛出异常。

继承Callable接口实现线程

class ThreadCall implements Callable<Integer>{
    @Override
    public Integer call() throws Exception {
        return 100;//更具需要设置返回值
    }
}
//调用方法案例
FutureTask<Integer> futureTask = new FutureTask<Integer> (new ThreadCall());
        new Thread (futureTask).start ();
        try {
            Integer integer = futureTask.get ();
            System.out.println (integer);
        } catch (InterruptedException e) {
            e.printStackTrace ();
        } catch (ExecutionException e) {
            e.printStackTrace ();
        }

因此可以将实现Runnable接口和实现Callable接口归为一种方式。这种方式与继承Thread方式之间的主要差别如下。

1.采用实现Runnable、Callable接口的方式创建多线程的优缺点:

优点:

线程类只是实现了Runnable接口与Callable接口,还可以继承其他类。
在这种方式下,多个线程可以共享一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想

缺点

编程稍稍复杂,如果需要访问当前线程,则必须使用Thread.currentThread()方法。

2.继承Thread

劣势:因为线程类已经继承了Thread类,所以不能再继承其他父类。
优势:编写简单,如果需要访问当前线程,则无须使用Thread.currentThread()方法,直接使用this即可获得当前线程。

总结:

鉴于上面分析,因此一般推荐采用实现Runnable接口、Callable接口的方式来创建多线程。

原文地址:https://www.cnblogs.com/li33/p/12715461.html