纵有疾风起
人生不言弃

线程的创建-三种方式

三种创建方式

一:继承Thread方式

class ThreadA extends Thread{       @Override       public void run(){            System.out.println("通过 继承Thread类 方式实现 ")       }}

二:实现Runnable接口

class ThreadB implements Runnable{    @Override       public void run(){            System.out.println("通过 实现Runnable接口 方式实现 ")       }}

三:实现Callable接口实现

class ThreadC implements  Callable<String>{        @Override        public String call() {            System.out.println("通过 实现Callable接口 方式实现 ")            return "success";        }}

调用示例

  public class ThreadTest{      public static void main(String [] args){        //ThreadA        Thread t1 = new Thread(new ThreadA());        t1.start();        //ThreadB        Thread t2 = new Thread(new ThreadB());        t2.start();        //ThreadC        ThreadC test = new ThreadC();        FutureTask<String> futureTask = new FutureTask<String>(test);        Thread t3 = new Thread(futureTask);        t3.start();        try {            //获取返回call方法结果            String result = futureTask.get(1, TimeUnit.SECONDS);            System.out.println(result);        } catch (Exception e) {            e.printStackTrace();        }    }  }

三种创建方式比较

继承创建线程的缺陷是受java单继承的影响,如果一个线程继承了Thread类,就无法继承其他类,不利于业务逻辑处理,并且Thread类其实也是实现了Runnable接口的

Callable和Runnale的区别

1.Runnable执行方法是run(),Callable是call()
2.实现Runnable接口的任务线程无返回值;Callable接口支持返回执行结果,此时需要调用FutureTask.get(long time, TimeUnit unit)方法实现,此方法会阻塞主线程直到获取子线程执行完的结果;当不调用此方法时,主线程不会阻塞
3.call方法可以抛出异常,run方法若有异常只能在内部消化。

原创,转载请著名出处!

文章转载于:https://www.jianshu.com/p/a852eab01195

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » 线程的创建-三种方式
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录