【并发编程】Java 如何开启一个线程(Thread,Runnable,Callable)

本贴最后更新于 1906 天前,其中的信息可能已经事过境迁

Java 如何开启一个线程

作者:Moonce
博客:望舒阁

一丶三种方式

  • 继承 Thread
  • 实现 Runnable 接口
  • 实现 Callable 接口

二丶实现 Demo

package com.moonce.thread;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 *@author moonce
 *
 *类说明:新建Java线程
 */
public class ThreadClient  {
    /*扩展自Thread类*/
    private static class UseThread extends Thread {
        @Override
        public void run() {
            System.out.println("I am extends Thread");
        }
    }
    /*实现Runnable接口*/
    private static class UseRun implements Runnable{

        @Override
        public void run() {
            System.out.println("I am implements Runnable");
        }

    }

    /*实现Callable接口,允许有返回值*/
    private static class UseCall implements Callable<String>{

        @Override
        public String call() throws Exception {
            System.out.println("I am implements Callable");
            return "Callable Result";
        }

    }

    public static void main(String[] args)
            throws InterruptedException, ExecutionException {
        //开启UseThread线程
        UseThread useThread = new UseThread();
        useThread.start();
		
        //开启UseRun线程
        UseRun useRun = new UseRun();
        new Thread(useRun).start();
		
        //开启UseCall线程
        UseCall useCall = new UseCall();
        FutureTask<String> futureTask = new FutureTask<>(useCall);
        new Thread(futureTask).start();
        System.out.println(futureTask.get());//打印UseCall线程返回结果
    }
}

三丶使用推荐

由于 Java 只支持单继承,所以用继承的方式创建线程,不够灵活,所以不推荐使用继承 Thread;用实现接口的方式创建线程,可以实现多个接口,下面是 Runnable 和 Callable 接口的区别,具体选用哪种需要参照实际开发情况。

  1. Callable 重写的方法是 call(),Runnable 重写的方法是 run();
  2. Callable 的任务执行后可返回值,而 Runnable 不能返回值;
  3. call 方法可以抛出异常,run()不可以;
  4. 运行 Callable 任务可以拿到一个 future 对象,表示异步计算的结果,它供检查计算是否完成的方法,以等待计算完成,并检索计算的结果。通过 Future 对象可以了解任务的执行情况,可取消任务的执行,还可以获取执行的结果。
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3165 引用 • 8206 回帖
  • 线程
    120 引用 • 111 回帖 • 3 关注
  • Runnable
    1 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...