服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java中Runnable与Callable接口的区别详解

Java中Runnable与Callable接口的区别详解

2023-03-30 16:44爱我-中华 Java教程

这篇文章主要为大家详细介绍了Java中Runnable与Callable接口的区别,文中的示例代码讲解详细,对我们学习Java有一定的帮助,需要的可以参考一下

预备知识

Java中的线程对象是Thread,新建线程也只有通过创建Thread对象的实例来创建。

先说结论

1 Runnable没有返回值的FunctionalInterface(jdk 1.8概念)接口,相反Callable是有返回值的FunctionalInterface接口

2 Runnable + Thread 创建一个无返回结果的任务线程

3 Runnable + Callable +Thread 创建一个有返回结果的任务线程

一:Runnable 示例

​ 创建一个无返回结果的任务线程,so eazy !!!!

?
1
2
3
4
5
6
7
8
public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "我是一个无返回结果的任务线程");
            }
        },"线程一:").start(); //start()开启任务
    }

二:Callable示例

2.1 JAVA异步编程之Callbacks与Futures模型

我是用Executors线程池的方式来创建的。

2.2 用最原始的方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class PrimitiveCallable implements Callable, Runnable {
    
    public static void main(String[] args) {
        //实现
        new Thread(new PrimitiveCallable(), "线程二:").start();
    }
    @Override
    public void run() {//Runnable实现
        try {
            Object call = this.call();
            System.out.println(call);
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
    @Override
    public Object call() throws Exception { //Callable 实现
        return "异步任务返回的结果!!!";
    }
}

2.3 FutureTask 一种jdk的实现方式

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class FutureTask<V> implements RunnableFuture<V> { //RunnableFuture 实现了以上2个接口
    ........省略.........
    public void run() { //重写run实现
        if (state != NEW ||
            !UNSAFE.compareAndSwapObject(this, runnerOffset,
                                         null, Thread.currentThread()))
            return;
        try {
            Callable<V> c = callable; //构建对象是传入的参数
            if (c != null && state == NEW) {
                V result;
                boolean ran;
                try {
                    result = c.call(); //调用任务并返回结果
                    ran = true;
                } catch (Throwable ex) {
                    result = null;
                    ran = false;
                    setException(ex); //设置异常时的结果
                }
                if (ran)
                    set(result); //设置结果
            }
        } finally {
            runner = null;
            int s = state;
            if (s >= INTERRUPTING)
                handlePossibleCancellationInterrupt(s);
        }
    }
     ........省略.........
}

小结

1 不要纠结有几种创建线程的方法了,就一种即通过Thread,但Thread有9个构造函数方法

2 9个构造函数方法

?
1
2
3
4
5
6
7
8
9
10
public Thread()
public Thread(Runnable target)
Thread(Runnable target, AccessControlContext acc)
public Thread(ThreadGroup group, Runnable target)
public Thread(String name)
public Thread(ThreadGroup group, String name)
public Thread(Runnable target, String name)
public Thread(ThreadGroup group, Runnable target, String name)
public Thread(ThreadGroup group, Runnable target, String name,
                 long stackSize)

到此这篇关于Java中Runnable与Callable接口的区别详解的文章就介绍到这了,更多相关Java Runnable Callable接口内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/jinliang374003909/p/17261669.html

延伸 · 阅读

精彩推荐
  • Java教程java9区分opens与exports

    java9区分opens与exports

    本篇文章主要给大家讲述了java9中opens与exports的区别以及用法的不同之处,一起学习下吧。...

    codecraft7302021-04-07
  • Java教程Java实现JDBC连接数据库简单案例

    Java实现JDBC连接数据库简单案例

    这篇文章主要介绍了Java实现JDBC连接数据库简单案例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    涛涌四海6202021-05-26
  • Java教程最新IntelliJ IDEA2017.3 激活方式

    最新IntelliJ IDEA2017.3 激活方式

    本文给大家提供最新IntelliJ IDEA2017.3 激活方式,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下...

    小布吉岛8062021-03-22
  • Java教程Java AbstractMethodError原因案例详解

    Java AbstractMethodError原因案例详解

    这篇文章主要介绍了Java AbstractMethodError原因案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    liunim9012142021-11-26
  • Java教程java实现员工工资管理系统

    java实现员工工资管理系统

    这篇文章主要为大家详细介绍了java实现员工工资管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Jiryane7642022-08-07
  • Java教程新手初学Java面向对象

    新手初学Java面向对象

    这篇文章主要介绍了Java语言面向对象编程思想之类与对象实例详解,还是十分不错的,这里给大家分享下,需要的朋友可以参考,希望能帮到你...

    群临天下5812021-09-29
  • Java教程javaweb实战之商城项目开发(一)

    javaweb实战之商城项目开发(一)

    这篇文章主要针对javaweb商城项目开发进行实战演习,对javaweb商城项目开发进行详细分析,感兴趣的小伙伴们可以参考一下 ...

    茶饮月10382020-04-03
  • Java教程最新版 IDEA 2022.1 正式上线新功能一览

    最新版 IDEA 2022.1 正式上线新功能一览

    4月12日,最新版的IDEA 2022.1正式发布,无论是从UI上,还是功能上,都有了很大的改进,完善,一起来看一下都有那些重要的更新...

    Resourceful!9632022-11-14