java线程探索

线程的创建-三种方式

2019-02-18  本文已影响4人  朽木亦自雕

三种创建方式

一:继承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方法若有异常只能在内部消化。

原创,转载请著名出处!

上一篇 下一篇

猜你喜欢

热点阅读