• 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接口的方式来创建多线程。

  • 相关阅读:
    【高端黑】软件工程师去理发店
    [SQL]用于提取组内最新数据,左连接,内连接,not exist三种方案中,到底谁最快?
    Oracle数据库访问客户端 sqldeveloper-19.2.1.247.2212-x64 下载
    《木兰辞》中最精彩的六句
    SqlComparison
    别让情绪扰乱心绪
    50年内神秘消失的恒星
    java命名总结
    针对nginx,来具体聊聊正向代理与反向代理 (转载)
    Nginx可以做什么?(转载)
  • 原文地址:https://www.cnblogs.com/li33/p/12715461.html
Copyright © 2020-2023  润新知