java创建线程的两种方法,java创建线程的三种方式

  java创建线程的两种方法,java创建线程的三种方式

  00-1010 1.继承Thread类1.1普通类继承Thread1.2匿名内部类1.3缺陷分析2。实现Runnable接口2.1普通类实现Runnable2.2匿名Runnable实现类2.3 Lambda创建Runnable2.4缺陷分析3。使用可调用接口3.1普通类实现可调用3.2匿名可调用实现类摘要在 Java 中,线程的创建方法有 7 种,分为以下 3 大类:

  继承Thread类,它有两种方法实现。实现Runnable接口有三种方法。实现可调用接口有两种方法。

  00-1010继承Thread类并重写run方法是最早创建线程的方法。其实现方法如下:

  创建一个普通类,继承Thread类,重写run方法。通过匿名内部类继承和重写run方法。具体实现如下。

  00-1010创建一个公共类,继承Thread并重写run方法,其中run方法中的代码是线程要执行的具体业务代码。其实现如下:

  //自定义一个类继承Thread并覆盖run方法类my Thread extends Thread { @ override public void run(){//Add business method.}}//创建一个线程并执行公共类Thread example { public static void main(string[]args){//创建线程Thread Thread=new myth read();//启动线程thread . Start();}}

  00-1010以上写法有点繁琐。我们也可以使用下面的匿名类来实现它:

  //匿名创建线程thread t1=new thread(){ @ override public void run(){//添加业务方法.}};//启动线程t1 . Start();

  00-1010继承Thread类的实现方法有一个明显的缺点。Java语言是单继承的,所以如果继承了Thread类,就不能继承其他类。

  Java语言中的00-1010,虽然不能多继承,但是可以实现多个接口。接下来,有3种方法来实现Runnable接口:

  创建一个公共类来实现runnable接口并覆盖Run方法。匿名创建Runnable实现类并覆盖run方法。用Lambda创建匿名的可运行实现类(JDK 8)。

  00-1010//定义一个通用类实现Runnable接口类my Runnable implements Runnable { @ override public void run(){//添加一个业务方法.}}//创建线程公共静态void main(string[]args){//创建一个Runnable实现类my Runnable my Runnable=new my Runnable();//Create thread thread=new thread(my runnable);//启动线程thread . Start();}

  00-1010//匿名可运行实现类thread T2=new thread(new Runnable(){ @ override public void run(){//添加业务方法.}});//启动线程T2 . Start();

  00-1010如下代码所示:.在JDK 8之后,我们可以使用Lambda表达式来创建线程

   class="brush:java;">// 使用 Lambda 匿名 Runnable 方式Thread t3 = new Thread(() -> { // 添加业务方法...});// 启动线程t3.start();从上述代码可以看出,如果是 JDK 1.8 以上的程序,在不要求获得线程执行结果的情况下,推荐使用 Lambda 的方式来创建线程,因为它的写法足够简洁

  

 

  

2.4 缺点分析

以上创建线程的方法,都有一个通用的问题:那就是不能获得线程的执行结果。

 

  

 

  

3.使用Callable接口

JDK 1.5 中推出的 Callable 接口,解决了之前不能获得线程执行结果的尴尬它的实现方法有以下两种:

 

  创建一个普通类实现 Callable 接口,并重写 call 方法。使用匿名内部类创建 Callable 的实现类,并重写 call 方法。

 

  

3.1 普通类实现Callable

// 定义普通实现 Callable 接口,返回一个 Integer 类型的结果(当然也可以返回其他类型的结果)class MyCallable implements Callable<Integer> { @Override public Integer call() throws Exception { // 业务实现代码... return 0; }}// 创建线程public static void main(String[] args) throws ExecutionException, InterruptedException { // 创建 Callable 普通类 MyCallable callable = new MyCallable(); // 使用 FutureTask 用于获取线程执行结果 FutureTask<Integer> futureTask = new FutureTask<>(callable); // 创建线程 Thread thread = new Thread(futureTask); // 启动线程 thread.start(); // 得到线程执行的结果 int result = futureTask.get();}

以上代码使用 FutureTask + Callable 的方式获取线程的执行结果,它可以接受任何类型的返回值,我们只需要在创建 Callable 实现类的时候,定义返回的数据类型即可。

 

  

 

  

3.2 匿名Callable实现类

// FutureTask 用于获取线程执行结果FutureTask<Integer> futureTask = new FutureTask<>(new Callable<Integer>() { @Override public Integer call() throws Exception { // 业务代码... return 0; }});// 创建线程Thread thread = new Thread(futureTask);// 启动线程thread.start();// 得到线程执行的结果int result = futureTask.get();

 

  

总结

在 Java 语言中,创建线程有 3 大类实现方式、7 种实现方法,如果是 JDK 1.8 以上版本,在不需要获得线程执行结果的情况下,推荐使用 Lambda 方式来创建线程,因为它的写法足够简洁;如果想要获取线程执行结果,可使用 FutureTask + Callable 的方式来实现。

 

  到此这篇关于Java都有哪些创建线程的方法的文章就介绍到这了,更多相关Java创建线程内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: