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

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

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 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3198 引用 • 8215 回帖 • 1 关注
  • 线程
    123 引用 • 111 回帖 • 3 关注
  • Runnable
    1 引用

相关帖子

欢迎来到这里!

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

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