设为首页 加入收藏

TOP

Java中创建线程的三种方式以及区别(二)
2019-02-07 22:07:57 】 浏览:191
Tags:Java 创建 线程 方式 以及 区别
,具体选择哪一种方式要看自己的需求。直接继承Thread类的话,可能比实现Runnable接口看起来更加简洁,但是由于Java只允许单继承,所以如果自定义类需要继承其他类,则只能选择实现Runnable接口。


和Runnable接口不一样,Callable接口提供了一个call()方法作为线程执行体,call()方法比run()方法功能要强大。


创建并启动有返回值的线程的步骤如下:


下面是一个例子:


public class Main {


  public static void main(String[] args){


   MyThread3 th=new MyThread3();


   //使用Lambda表达式创建Callable对象


    //使用FutureTask类来包装Callable对象


   FutureTask<Integer> future=new FutureTask<Integer>(


    (Callable<Integer>)()->{


      return 5;


    }


    );


   new Thread(task,"有返回值的线程").start();//实质上还是以Callable对象来创建并启动线程


    try{


    System.out.println("子线程的返回值:"+future.get());//get()方法会阻塞,直到子线程执行结束才返回


    }catch(Exception e){


    ex.printStackTrace();


   }


  }


}


实现Runnable和实现Callable接口的方式基本相同,不过是后者执行call()方法有返回值,后者线程执行体run()方法无返回值,因此可以把这两种方式归为一种这种方式与继承Thread类的方法之间的差别如下:


PS:一般推荐采用实现接口的方式来创建多线程


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python3.7 dataclass使用指南 下一篇Java设计和实现方法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目