为什么80%的码农都做不了架构师?>>>   

本文将结合操作系统的信号机制,来尝试实现一个简单的,不依赖功能环境的Java异步通知功能。 没有特殊说明,本文所有的示例,都是基于Linux。

信号简介

信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。 通俗来讲,信号就是进程间的一种异步通信机制。

典型的例子: kill -s SIGKILL pid (即kill -9 pid) 立即杀死指定pid的进程。 在上面这个例子中,SIGKILL就是往pid进程发送的信号。

信号及其效果列表 http://docs.google.com/View?id=dtbhrmv_754gh86rcg4

平台相关性

信号具有平台相关性,不同平台下能使用的信号种类是有差异的。

在Linux下支持的信号(对比信号列表查看描述) SEGV, ILL, FPE, BUS, SYS, CPU, FSZ, ABRT, INT, TERM, HUP, USR1, USR2, QUIT, BREAK, TRAP, PIPE

在Windows下支持的信号 SEGV, ILL, FPE, ABRT, INT, TERM, BREAK

信号选择

为了不干扰正常信号的运作,又能模拟Java异步通知,我们需要先选定一种特殊的信号。 通过查看信号列表上的描述,发现 SIGUSR1 和 SIGUSR2 是允许用户自定义的信号。 那么选择它们,理论上就不会影响正常功能了。

这里我选用了USR2作为传递信号。原因是USR1有可能已被其他APP占用。

实例代码
import sun.misc.Signal; import sun.misc.SignalHandler;      /**      * Java Signal Test      * @author Ken Wu      *      */     @SuppressWarnings("restriction")      public class TestSignal implements SignalHandler {          private void signalCallback(Signal sn) {              System.out.println(sn.getName() + "is recevied.");          }          @Override         public void handle(Signal signalName) {              signalCallback(signalName);          }          public static void main(String[] args) throws InterruptedException {              TestSignal testSignalHandler = new TestSignal();              // install signals              Signal sig = new Signal("USR2");              Signal.handle(sig, testSignalHandler);              Thread.sleep(15000);          }      }
import sun.misc.Signal; import sun.misc.SignalHandler;   /**  * [...]

转载于:https://my.oschina.net/javagg/blog/3229

基于OS信号实现Java异步通知相关推荐

  1. java 异步通知_Java 异步回调机制实例解析

    什么是回调?今天傻傻地截了张图问了下,然后被陈大牛回答道"就一个回调-".此时千万个草泥马飞奔而过 哈哈,看着源码,享受着这种回调在代码上的作用,真是美哉.不妨总结总结. 一.什么 ...

  2. linux. qt信号崩溃,【创龙AM4379 Cortex-A9试用体验】之I/O中断异步通知驱动程序+QT捕获Linux系统信号+测试信号通知...

    2.驱动程序 安装字符设备驱动程序开发流程开发. 2.1资源定义 定义按键I/O端口号.I/O中断号,以及字符设备的主设备号变量: #define GPIO_KEY1_PIN_NUM (3*32 + ...

  3. 魔坊APP项目-18-种植园,基于支付宝提供的沙箱测试环境开发支付接口、服务端, 处理支付结果的同步通知和异步通知、修复页面底部菜单无法被点击的BUG

    种植园 一.基于支付宝提供的沙箱测试环境开发支付接口 沙箱环境: https://openhome.alipay.com/platform/appDaily.htm?tab=info 开发文档: ht ...

  4. 阿里技术专家加多:Java异步编程实战之基于JDK中的Future实现异步编程 | 文末赠书...

    正文共:14244 字 8 图 预计阅读时间: 36 分钟 本节内容摘自<Java异步编程实战>中的一小节. 一.前言 本节主要讲解如何使用JDK中的Future实现异步编程,这包含如何使 ...

  5. 异步通知实验(信号)

    目录 异步通知 异步通知简介 驱动中的信号处理 应用程序对异步通知的处理 硬件原理图分析 实验程序编写 修改设备树文件 程序编写 编写测试APP 运行测试 编译驱动程序和测试APP 运行测试 在前面使 ...

  6. 阿里技术专家加多:Java异步编程实战之基于JDK中的Future实现异步编程

    正文共:14244 字 8 图 预计阅读时间: 36 分钟 本节内容摘自<Java异步编程实战>中的一小节. 一.前言 本节主要讲解如何使用JDK中的Future实现异步编程,这包含如何使 ...

  7. java微信支付异步通知_Java中微信支付退款异步通知解码

    微信所有的支付结果都是加密处理的,他和订单支付成功的异步通知不一样. 他的基本返回是: SUCCESS 我们需要对req_info解码才能看到退款的明文 解码后会得到明文: 解密步骤如下: (1)对加 ...

  8. 使用信号实现异步通知机制的例子

    include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <fcntl. ...

  9. Java支付宝APP支付-验证异步通知消息

    上一章已经讲述了支付宝如何生成支付订单,这一章讲述一下支付宝生成订单之后,异步通知接口的开发. 这里先讲一下啥叫支付宝异步通知:对于App支付产生的交易,支付宝会根据原始支付API中传入的异步通知地址 ...

最新文章

  1. 0x06.基本算法 — 倍增
  2. CoordinatorLayout 之深入理解
  3. opencv教程大全
  4. 请简述计算机软件系统与硬件系统的关系,电脑硬件与软件的关系是什么?
  5. 明天参加GDG devfest
  6. 服务器2012怎么换桌面背景,2012年职称计算机Windows XP:更改桌面背景和颜色
  7. 如何在用户登录时SAP时自动执行Tcode或者其他一些东西
  8. 1205: 正序数(归并排序统计正序数)
  9. H264 流媒体 编码汇总
  10. reactrouter4路由钩子_react router @4 和 vue路由 详解(八)vue路由守卫
  11. idea 部署 web tomcat
  12. 二十一天学通VC++之创建工作者线程
  13. Docker详解(三)——Docker安装与部署
  14. Atitit 常见集合的操作 dsl表达式 选择器 多属性条件检索 ,排序等 目录 1. Ognl 集合操作 1 2. /bookmarksHtmlEverythingIndexPrj/src/Li
  15. 让自己的网站可以被搜索
  16. STM32H750 开启 SAI 模块
  17. 利用Java计算圆柱体积
  18. 表格自动填充上一行_如何在Google文档电子表格上使用自动填充[快速提示]
  19. Hark的数据结构与算法练习之冒泡排序
  20. Excel只保留2位小数,删掉其他小数位

热门文章

  1. wpf采用Xps实现文档显示、套打功能
  2. 【JVM调优系列】----NewRatio与SurvivorRatio
  3. DPM2007轻松恢复Exchange邮件,DPM2007系列之三
  4. jQuery - AJAX 简介
  5. [译] 解密 Airbnb 的数据科学部门如何构建知识仓库
  6. 电脑启动后,没有桌面
  7. 关于RabbitMq你必须深入理解的内容
  8. Ansible 入门指南 - ansible-playbook 命令
  9. MS SQL Server查询优化方法
  10. ipv6下单播。组播 泛播