如何使用Callable和FutureTask

介绍

从Java 1.5开始,在java.util.concurrent下有了新的对象集。 该程序包具有许多不同的类,包括线程队列。 当我用Java 1.2编程时,我本可以使用那些! 当我开始看这些新玩具时,我变得犹豫不决。 这是什么可调用的东西,未来是什么? 事实证明,未来和可赎回没有错。 实际上,它们是我在Java生涯中一直期望的。

可调用和可运行之间的区别

可调用是Runnable希望成为的。 Callable的唯一方法是“ T call()”。 使它如此整洁的原因是它返回了一些东西。 这是必须为任务的答案创建吸气剂的步骤。 虽然这很酷,但仍需要一种获取返回值的方法。

未来在这里

当Callable完成时,Future有一种获取价值的方法。 该函数是get()或get(长超时,TimeUnit单位)。 这等效于调用thread.join();。 同时运行runnable.getValue()。

我创建了一个名为CounterCallable的类。 它所做的只是从变量开始到变量结束加数字。

可赎回

package org.mathison.futurecallable;import java.util.concurrent.Callable;/**** @author Daryl*/
public class CounterCallable implements Callable {private long start;private long end;public CounterCallable(long start, long end) {this.start = start;this.end = end;}@Overridepublic SumTimeAnswer call() throws Exception {long sum = 0;long startTime = System.currentTimeMillis();for(long i = start; i <= end; i++){sum += i;}long endTime = System.currentTimeMillis();return new SumTimeAnswer(sum, endTime - startTime);}
}

SumTimeAnswer

SumTimeAnswer类实际上是一个简单的getter类,它保存执行操作所需的时间总和。

package org.mathison.futurecallable;/**** @author Daryl*/
public class SumTimeAnswer {private long timeToFinish;private long sum;public SumTimeAnswer(long sum, long timeToFinish) {this.sum = sum;this.timeToFinish = timeToFinish;}public long getTimeToFinish() {return timeToFinish;}public long getSum() {return sum;}
}

应用程式

应用程序只是将所有内容汇集在一起​​的主要课程

package org.mathison.futurecallable;import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;/*** Hello world!**/
public class App 
{public static final long BEGIN = 0;public static final long END = 100000;public static void main( String[] args ){FutureTask task = new FutureTask(new CounterCallable(BEGIN, END));FutureTask firstHalf = new FutureTask(new CounterCallable(BEGIN, END/2));FutureTask secondHalf = new FutureTask(new CounterCallable(END/2 + 1, END));ExecutorService pool = Executors.newSingleThreadExecutor();pool.submit(task);pool.submit(firstHalf);pool.submit(secondHalf);try {SumTimeAnswer taskAnswer = task.get();System.out.println("just one thread Time: " + taskAnswer.getTimeToFinish()+ " Total: " + taskAnswer.getSum());SumTimeAnswer taskFirstAnswer = firstHalf.get();SumTimeAnswer taskSecondAnswer = secondHalf.get();long totalTime = taskFirstAnswer.getTimeToFinish() + taskSecondAnswer.getTimeToFinish();long totalSum = taskFirstAnswer.getSum() + taskSecondAnswer.getSum();System.out.println("Two thread time: " + totalTime + " Total: " + totalSum);} catch(CancellationException | InterruptedException | ExecutionException e) {e.printStackTrace();}pool.shutdown();}
}

结论

在本文中,使用Callable和FutureTask类来演示如何使用java.util.concurrent包。

翻译自: https://www.javacodegeeks.com/2014/10/how-to-use-callable-and-futuretask.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NodeJS的安装与使用

Node.js 就是运行在服务端的 JavaScript。越来越多的人在使用它&#xff0c;通过他我们可以用JavaScript来构建后台。对于前端程序员而言&#xff0c;不言而喻这是一条多么令人振奋的消息。对于后台程序员而言&#xff0c;这也是一种很不错的选择。 下面我就来讲解下nodejs的安…

转载 300年前的黑色“巫女”

1741年&#xff0c;北极。 白令招呼水手们把船靠上小岛的时候&#xff0c;一排黑色的鸬鹚站在陡峭的悬崖上&#xff0c;像一群黑色的巫女&#xff0c;一动不动朝着他们张望。白令顿时有了一种不祥的预兆。 果然&#xff0c;刚刚上岛&#xff0c;就遭到古怪的兰狐的袭击&#xf…

华为在爱尔兰增设150个LTE研发职位

据国外媒体报道中国电信和网络跨国公司华为技术预计将在未来两年内在爱尔兰增设150个职位。华为公司目前设在爱尔兰都柏林、阿斯隆和科克的业务处共有50名员工。现在&#xff0c;公司已经投标竞购牌照&#xff0c;目的是为在爱尔兰推出第四代宽带进行基础设施开发。华为公司爱尔…

Java EE 7 / JAX-RS 2.0 – REST上的CORS

Java EE REST应用程序通常在开箱即用的开发机器上运行良好&#xff0c;该开发机器上所有服务器端资源和客户端UI均指向“ localhost”或127.0.0.1。 但是&#xff0c;当涉及跨域部署时&#xff08;当REST客户端不再与托管REST API的服务器位于同一域时&#xff09;&#xff0c;…

jQuery框架-1.jQuery基础知识

jQuery简介 jQuery&#xff0c;顾名思义是JavaScript和查询&#xff08;Query&#xff09;&#xff0c;jQuery是免费、开源的。它可以简化查询DOM对象、处理事件、制作动画、处理Ajax交互过程且兼容多浏览器的javascript库&#xff0c;核心理念是write less,do more(写得更少,…

用CornerStone配置SVN,HTTP及svn简单使用说明

原文地址&#xff1a;&#xff1a;&#xff1a;http://my.oschina.net/joanfen/blog/194491#OSC_h2_3 一、下载地址二、安装破解方法三、添加repository 1.SVN配置 2.HTTP配置四、使用简介 1.上传项目到repository 2.下载项目 3.版本管理 a)先更新后提交 b)完成独立功…

联系随笔2---在tomcat服务器上发布servlet应用程序

问题二&#xff1a;在tomcat服务器上发布servlet应用程序 1,new->Dynamic Web Project写工程名字->next->next在Generate web.xml文件上打勾勾->finish. 2&#xff0c;在工程名字上&#xff0c;new->servlet。在create Servlet对话框中填写java package包名字和…

Apache Lucene 5.0.0即将发布!

终于&#xff0c;在一系列强大的4.x功能&#xff08;最近是4.10.2&#xff09;发布之后&#xff0c;我们终于在努力开发另一个主要的Apache Lucene版本&#xff01; 没有确切时间的承诺&#xff08;完成时就完成了&#xff01;&#xff09;&#xff0c;但是我们已经有一个自愿…

从零开始学习前端开发 — 15、CSS3过渡、动画

一、css3过渡 语法&#xff1a; transition: 过渡属性 过渡时间 延迟时间 过渡方式; 1.过渡属性(transition-property) 取值&#xff1a;all 所有发生变化的css属性都添加过渡 eg: transition: all 1s; ident 指定要过渡的css属性列表 eg: transition:border-radius 1s,back…

CentOS6.4 Install FTP

目录 安装参考传输模式遇到无法显示远程文件夹报错安装参考 https://www.cnblogs.com/walblog/articles/7890226.html 传输模式 主动模式被动模式遇到无法显示远程文件夹报错 点击属性设置&#xff1a; 搞定。 转载于:https://www.cnblogs.com/mysticbinary/articles/11271647.…

windowsphone7高级编程中提到的地址

1、综合性技术论坛&#xff0c;包括windowsphone,.net,iphone,android等&#xff0c;网址&#xff1a;http://p2p.wrox.com 2、windowsphone7高级编程作者Nick Randolph发表博客的网站&#xff0c;网址&#xff1a;http://www.christec.co.nz/&#xff0c; 书中代码下载地址&am…

用于单元测试的JUnit教程–最终指南(PDF下载)

编者注&#xff1a; 我们在Java Code Geeks上提供了许多JUnit教程&#xff0c;例如JUnit入门示例 &#xff0c; 使用断言和注释的 JUnit 示例 &#xff0c; JUnit注释示例等。 但是&#xff0c;为了方便读者&#xff0c;我们希望将所有JUnit功能收集在一份详细的指南中。 我们…

EF 拉姆达 linq if else (整理)

首先想到&#xff1a;结果不正确&#xff01; var data0 db.T_Plants2; //这里加.AsQueryable()if (locationType 1){.Where(d > d.NaturalEcosystem true);}else{.Where(d > d.BuiltUpArea true);}.Select(d > new{AnimalID d.PlantID,Species d.Species,}).To…

从零开始学习前端开发 — 7、CSS宽高自适应

一、宽度自适应 语法&#xff1a;width:100%; 注&#xff1a; a&#xff09;块状元素的默认宽度为100% b) 当给元素设置宽度为100%时&#xff0c;继承父元素的宽度 c) 通常使用宽度自适应实现通栏效果 二、高度自适应 语法&#xff1a;height:auto;&#xff08;等同于不给元…

用jOOQ用Java编写SQL

jOOQ是“数据库优先”的类型安全的SQL API&#xff0c;使您可以直观地用Java编写SQL&#xff0c;就像Java编译器本身支持SQL语言一样。 所有数据库模式&#xff0c;表&#xff0c;列&#xff0c;过程和其他对象均作为Java对象提供&#xff0c;可以直接在jOOQ SQL API中使用。 …

Springboot + Mybatis + Ehcache

最近在做一个项目&#xff0c;为处理并发性较差的问题&#xff0c;使用了Mybatis二级缓存 但在多表联合查询的情况下&#xff0c;Mybatis二级缓存是存在着数据脏读的问题的 两天就是在想办法解决这个数据脏读的问题 考虑到简易性、性能、兼容性、可扩展性&#xff0c;我选择了s…

Autowired注解

package com.how2java.pojo;import org.springframework.beans.factory.annotation.Autowired;public class Product {private int id;private String name;Autowired// 等价于 Resource(name"c")private Category category;public int getId() {return id;}public …

UVa 100

今天也算是练习了一下记忆化搜索&#xff0c;这道题也包含很多值得注意的地方 1、 输入的两个数不一定前者比后者大 2、 变换的过程中可能会超出int范围 3、 为了不超时可以作下预处理 #include<iostream>#include<cstring>#include<cstdio>using namesp…

jquery.cookie.js 使用方法

Cookies 定义&#xff1a;让网站服务器把少量数据储存到客户端的硬盘或内存&#xff0c;从客户端的硬盘读取数据的一种技术&#xff1b; 下载与引入:jquery.cookie.js基于jquery&#xff1b;先引入jquery&#xff0c;再引入&#xff1a;jquery.cookie.js&#xff1b;下载&…

BizTalk开发系列(十二) Schema设计之Group与Order

更多内容请查看&#xff1a;BizTalk动手实验系列目录 BizTalk 开发系列 开发BizTalk项目的时候会先约定各系统之间往来的消息格式. 由于BizTalk内部唯一使用XML文档。因此消息的格式为XML Schema(XML Schema 用于描述 XML 文档的结构)。虽然BizTalk提供了对于XML消息的验证功能…