小编典典

定义一个回调接口,以接收要在完成通知中传递的任何参数。然后在任务结束时调用它。

你甚至可以为Runnable任务编写通用包装,并将其提交给ExecutorService。或者,请参阅下面的Java 8中内置的机制。

class CallbackTask implements Runnable {

private final Runnable task;

private final Callback callback;

CallbackTask(Runnable task, Callback callback) {

this.task = task;

this.callback = callback;

}

public void run() {

task.run();

callback.complete();

}

}

使用CompletableFutureJava 8,Java 8包含了一种更精细的方法来组成管道,在该管道中可以异步和有条件地完成进程。这是一个人为但完整的通知示例。

import java.util.concurrent.CompletableFuture;

import java.util.concurrent.ThreadLocalRandom;

import java.util.concurrent.TimeUnit;

public class GetTaskNotificationWithoutBlocking {

public static void main(String... argv) throws Exception {

ExampleService svc = new ExampleService();

GetTaskNotificationWithoutBlocking listener = new GetTaskNotificationWithoutBlocking();

CompletableFuture f = CompletableFuture.supplyAsync(svc::work);

f.thenAccept(listener::notify);

System.out.println("Exiting main()");

}

void notify(String msg) {

System.out.println("Received message: " + msg);

}

}

class ExampleService {

String work() {

sleep(7000, TimeUnit.MILLISECONDS); /* Pretend to be busy... */

char[] str = new char[5];

ThreadLocalRandom current = ThreadLocalRandom.current();

for (int idx = 0; idx < str.length; ++idx)

str[idx] = (char) ('A' + current.nextInt(26));

String msg = new String(str);

System.out.println("Generated message: " + msg);

return msg;

}

public static void sleep(long average, TimeUnit unit) {

String name = Thread.currentThread().getName();

long timeout = Math.min(exponential(average), Math.multiplyExact(10, average));

System.out.printf("%s sleeping %d %s...%n", name, timeout, unit);

try {

unit.sleep(timeout);

System.out.println(name + " awoke.");

} catch (InterruptedException abort) {

Thread.currentThread().interrupt();

System.out.println(name + " interrupted.");

}

}

public static long exponential(long avg) {

return (long) (avg * -Math.log(1 - ThreadLocalRandom.current().nextDouble()));

}

}

2020-03-09

Java任务完成后结算_Java执行程序:如何在任务完成时无阻碍地得到通知?相关推荐

  1. java输错重新输入_java程序在dos界面运行时输入错误后返回重新输入的方法

    展开全部 修改点:62616964757a686964616fe78988e69d8331333332623936在switch中增加default判断错误的输入 将while设置成无限循环,就能够继 ...

  2. java字符串从后截取_java 字符串截取的几种方式(转)

    众所周知,java提供了很多字符串截取的方式.下面就来看看大致有几种. 1.split()+正则表达式来进行截取. 将正则传入split().返回的是一个字符串数组类型.不过通过这种方式截取会有很大的 ...

  3. java反射 获取参数类型_Java反射带参构造创建对象时如何自动转换参数类型

    需求是这样的:有一个类,类的路径知道,例如是com.xx.xx.xx其中有不同类型的成员变量(个数未知),有对应的setter和getter方法,有一个无参构造和一个全参构造.现在需要用反射机制... ...

  4. java 面向对账 抽象_java开发银行支付、对账时证书相关的操作实例

    java 开发银行支付.对账时证书相关的操作总结. 证书的相关操作主要是在CMD窗口使用keytool工具Keytool 是一个Java数据证书的管理工具 ,Keytool将密钥(key)和证书(ce ...

  5. JAVA标准包不存在_JAVA中引入自建包时提示包不存在

    请各位帮帮忙,我在引入自建的一个包的时候遇到了个问题:有两个JAVA程序:SquareEquation.java(保存于E:\1000)-------------------------------- ...

  6. java怎么让进程停止_JAVA:如何在进程停止时调用一个方法(甚至有可能吗?)

    Here is a pretty good guide to signal handling in Java.它还涵盖关闭和终止情况,包括Ctrl-C. 您想要的特定呼叫位于运行时间addShutdo ...

  7. java 子类的同名方法_java 父类子类有同名方法时如何调用的实现

    父类引用默认调用子类重写的方法 如果父类的引用p指向了子类的实例,则通过这个引用p访问同名方法时,调用的是子类重写的方法. 父类引用p可以指向不同的子类,调用不同子类重写的不同的同名方法,进而达到类间 ...

  8. java双等比较值_java – 执行双值相等比较时,应该是epsilon值

    以下是以下程序的输出. value is : 2.7755575615628914E-17 Double.compare with zero : 1 isEqual with zero : true ...

  9. 理解java虚拟机工作后了解吗_JAVA入门到再次入门——深入理解JAVA虚拟机(二)|七日打卡...

    前言 为什么叫做入门到到再次入门请参考前一篇或个人博客,在此不再赘述,嗯哼,了解了JVM的基本运行流程以及内存结构,算是初步认识了JVM,跟着课本往前走,继续了解根据JVM的内存模型探索java当中变 ...

最新文章

  1. 生物学专业_北京交通大学617生物化学20082011历年考研专业课真题汇编
  2. 《LeetCode力扣练习》第46题 全排列 Java
  3. OpenGL纹理上下颠倒翻转的三种解决办法(转)
  4. Redis与Memcached的比较
  5. 跟进table_cache参数
  6. 算法训练营08-分治和回溯
  7. 曼彻斯特编码_两种编码方式以及两种帧结构
  8. PHP高效获取远程图片尺寸和大小(转)
  9. L1-014. 简单题-PAT团体程序设计天梯赛GPLT
  10. wordpress 使用mysql添加文章_WordPress代码插入文章函数:wp_insert_post
  11. Django模板-模板标签
  12. kali2020出现中文乱码解决
  13. ​大连商务英百家外语英语六级水平,适合报考BEC中级还是高级
  14. 算机类学术论文 28个常见出版社一般写法(参考文献用)
  15. canvas画布上的文字随窗口大小变形
  16. HECTF 部分wp
  17. 密码就快要彻底消失了,没有人怀念它
  18. 1.1 数列极限与函数极限
  19. Android基础-1.指南说明
  20. 美国电脑出货量的现实和思考

热门文章

  1. 5个Python特性 越早知道越好的
  2. HTML/CSS常用标签属性及样式
  3. 案例:使用正则表达式的爬虫
  4. kafka 数据可靠性深度解读
  5. python开源库生成式对抗网络_神经网络结构:生成式对抗网络(GAN)
  6. LFDMM源码剖析(融入词向量的概率图模型)
  7. 关于maven导入工程pom文件报错问题及解决
  8. Ubuntu下设置环境变量的三种方法
  9. 归并排序(二路、递归)
  10. 从JVM的角度看JAVA代码--代码优化