java 多线程Thread、Runnable和Callable的区别和用法

文章目录Callable实现多线程importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.FutureTask;/**一、创建执行线程的方式三:实现Callable接口。相较于实现Runnable接口的方式,方法可以有返回值,并且可以抛出异常。**二、执行Callable方式,需要FutureT

大家好,又见面了,我是你们的朋友全栈君。

文章目录

Callable 实现多线程

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
 
/*
 * 一、创建执行线程的方式三:实现 Callable 接口。 相较于实现 Runnable 接口的方式,方法可以有返回值,并且可以抛出异常。
 *
 * 二、执行 Callable 方式,需要 FutureTask 实现类的支持,用于接收运算结果。  FutureTask 是  Future 接口的实现类
 */
public class TestCallable {
 
    public static void main(String[] args) {
        ThreadDemo td = new ThreadDemo();
 
        //1.执行 Callable 方式,需要 FutureTask 实现类的支持,用于接收运算结果。
        FutureTask<Integer> result = new FutureTask<>(td);
 
        new Thread(result).start();
 
        //2.接收线程运算后的结果
        try {
            Integer sum = result.get();  //FutureTask 可用于 闭锁 类似于CountDownLatch的作用,在所有的线程没有执行完成之后这里是不会执行的
            System.out.println(sum);
            System.out.println("------------------------------------");
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }
 
}
 
class ThreadDemo implements Callable<Integer> {
 
    @Override
    public Integer call() throws Exception {
        int sum = 0;
 
        for (int i = 0; i <= 100000; i++) {
            sum += i;
        }
 
        return sum;
    }
 
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126573.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mybatis拦截器详解_mybatis过滤器

    mybatis拦截器详解_mybatis过滤器原文https://blog.csdn.net/weixin_39494923/article/details/91534658一.背景在很多业务场景下我们需要去拦截sql,达到不入侵原有代码业务处理一些东西,比如:分页操作,数据权限过滤操作,SQL执行时间性能监控等等,这里我们就可以用到Mybatis的拦截器Interceptor二.Mybatis核心对象介绍从MyBatis代码实现的角度来看,MyBatis的主要的核心部件有以下几个:Configuration初始化基础配置,比如MyBat

    2025年10月13日
    3
  • 手把手教你如何获取微信公众号用户的个人信息(包括OpenId)

    手把手教你如何获取微信公众号用户的个人信息(包括OpenId)最近,对微信公众号有点兴趣,就自己研究了研究里面的一些内容,发现还挺有意思的,而且通过微信公众号可以调用一些比较有意思的接口,就比如百度开发服务平台点击进入里面的很有接口,就比较常见的翻译,语音识别,地理位置等等,都挺好的。好了,不多说,进入正题好了。我想,做微信公众号开发的,对于想获取关注了公众号的用户信息,或者说是当前与后台服务器进行交互的当前用户信息,这个功能是很重要…

    2022年6月8日
    210
  • (二)selenium的实际运用

    (二)selenium的实际运用

    2021年5月17日
    115
  • vscode设置字体大小和字体(vscode窗口字体大小设置)

    VScode如何设置字体大小第一步:首先打开vscode,在vscode的左下角有一个设置按钮,单机打开,选择settings选项第二步:在设置中查找font(字体)选项,并打开第三步:在font选项内,选择fontsize,就可以设置字体的大小了还有一些其他的关于字体的设置也可以进行修改…

    2022年4月18日
    4.0K
  • MyBatis面试题总结「建议收藏」

    MyBatis面试题总结「建议收藏」啃下MyBatis源码-MyBatis面试题总结1.概念/使用方法向的问题1.1什么是Mybatis?1.2为什么说Mybatis是半ORM框架?/与Hibernate有哪些不同?1.3Mybaits的优点?1.4MyBatis框架的缺点?1.5#{}和${}的区别?1.6怎么解决实体类中的属性名和表中的字段名不一样的问题?1.7在mapper中如何传递多个参数?…

    2022年6月11日
    27
  • SQL索引使用初步,(转)

    SQL索引使用初步,(转)

    2021年6月20日
    102

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号