`
wangym
  • 浏览: 124458 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java Signal实例

    博客分类:
  • Java
 
阅读更多

TimYang在博文《降低应用latency方法谈》 中提到对Java方法进行Profiling,在某些场景更倾向于采用纯Java工具类的方法,比如通过给进程发Signals来实现,以求动态地打开或关闭Profiler。

 

感觉这个思路不错,以下是一个大致实例:

 

SignalTest.java

 

/**
 * 
 */
package signal;

import java.util.Observable;
import java.util.Observer;
import sun.misc.Signal;
import sun.misc.SignalHandler;

/**
 * @author xuanyin
 * 
 */
public class SignalTest implements Observer {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		new SignalTest().go();
	}

	private void go() {

		try {

			HandlerTest sh = new HandlerTest();
			sh.addObserver(this);
			sh.handleSignal("HUP");
			sh.handleSignal("BUS");
			System.out.println("Sleeping for 60 seconds: hit me with signals!");
			Thread.sleep(60000);

		} catch (Throwable x) {

			x.printStackTrace();
		}
	}

	/**
	 * 
	 */
	@Override
	public void update(Observable arg0, Object arg1) {

		System.out.println("Received signal: " + arg1);
	}

	/**
	 * HandlerTest Class
	 */
	class HandlerTest extends Observable implements SignalHandler {

		@Override
		public void handle(Signal signal) {

			setChanged();
			notifyObservers(signal);
		}

		/**
		 * 
		 * @param signalName
		 * @throws IllegalArgumentException
		 */
		public void handleSignal(String signalName) throws IllegalArgumentException {

			try {

				Signal.handle(new Signal(signalName), this);

			} catch (IllegalArgumentException x) {

				throw x;

			} catch (Throwable x) {

				throw new IllegalArgumentException("Signal unsupported: "+signalName, x);
			}
		}
	}

}

 

首先运行执行上述程序,然后查看其系统进程号。

如,若是4089,则在终端中执行kill -s BUS 4089

Java程序输出:Received signal: SIGBUS

 

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

 

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

 

不足之处欢迎大家留言指正:)

 

3
0
分享到:
评论

相关推荐

    Java异步调用转同步方法实例详解

    Java异步调用转同步方法实例详解 Java异步调用转同步方法实例详解是指在Java中将异步调用转换为同步调用的技术,主要用于解决异步调用过程中的阻塞问题。异步调用是一种非阻塞的调用方式,调用方在调用过程中,不...

    jbpm实例开发

    《jbpm实例开发详解》 jbPM,全称Java Business Process Management,是一款开源的工作流管理系统,主要用于业务流程的建模、部署和管理。本篇将围绕jbPM实例开发,通过实例来解析其基本概念、流程设计和执行管理,...

    signal processing

    在数字信号处理(Digital Signal Processing, DSP)中,信号被转换为数字形式,并使用计算机算法进行分析和处理。本入门教材系统地介绍了数字信号处理的基础概念和方法论,不要求读者具有广泛的数学背景。本书的作者...

    signal-cli:signal-cli为signalapplibsignal-service-java提供了命令行和dbus接口

    为了链接到现有的Signal-Android / signal-cli实例,signal-cli使用了 ,因为libsignal-service-java尚不支持将其。 要进行注册,您需要一个电话号码,您可以在其中接收SMS或来电。 signal-cli主要用于在服务器上...

    Java数字信号处理

    10. **应用实例**:Java数字信号处理技术被广泛应用于通信系统(如无线通信和卫星通信)、音频和视频编码、医疗成像、雷达和遥感、地震数据分析等领域。 通过学习和实践Java数字信号处理,开发者能够掌握信号处理的...

    Qt5开发及实例-CH205.rar,Qt5功能与使用Java风格迭代器的例子代码

    Qt5开发及实例,实例CH205,功能与使用Java风格迭代器的例子基本相同。不同的是,这里通过查找键来实现值的修改。 介绍Qt开发程序的流程,其中涉及Qt应用程序用户界面中的事件关联操作内容—信号和槽机制(Signal & ...

    Curve25519 的合成 Kotlin 实现,一个快速椭圆曲线 Diffie-Hellman 与 Edwards 曲线数字签

    此实现不使用本机 C curve25519-donna,仅依赖于 Signal 的纯 Java 代码。因此,就动态曲线提供程序而言,这是 Signal curve25519-java的降级版本。 获取实例 调用者初始化 Curve25519 的单例实例。

    Java enum的用法详解

    如果我们想要在 enum 中添加新的方法,那么必须在 enum 实例序列的最后添加一个分号。例如: ```java public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLOW("黄色", 4); // 成员变量...

    Java信号/槽支持样例

    在"TestSS.jar"这个文件中,很可能包含了一个实现了信号/槽机制的Java应用实例。我们可以推测这个程序可能包含以下几个关键部分: 1. **信号类(Signal Class)**:这是用于定义和发射信号的类,它可能会包含一些...

    java经典多线程面试题

    - 使用Condition接口提供的await()、signal()和signalAll()方法在java.util.concurrent.locks包中的实现类也可以实现线程间的通信。 10. Java中的并发集合类有哪些? - java.util.concurrent包中提供了一些线程...

    Java enum的用法详解.docx

    Java 枚举(enum)是Java 1.5 引入的一种新的数据类型,它用于表示一组相关的值,这些值可以被当作常量来使用。枚举类型比传统的静态常量更加安全,可读性更好,并且允许进行更丰富的定制。下面我们将详细探讨Java ...

    枚举java基础知识点

    而且 Java 要求必须先定义 enum 实例。例如: ```java public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量 private String name; private int index; ...

    电梯模拟器 java 代码

    Java的`Lock`接口提供了条件变量,如`await()`和`signal()`方法,用于线程间的通信和协作。 5. **事件驱动编程**:电梯模拟器通常基于事件驱动模型,如电梯到达楼层、乘客按下按钮等。你可以使用观察者模式...

    Java使用Condition控制线程通信的方法实例详解

    Java 使用 Condition 控制线程通信的方法实例详解 Java 中,Condition 类是 Lock 接口的一个补充,它提供了一种机制来让线程等待某个条件的满足,然后继续执行。Condition 将同步监视锁方法(wait、notify 和 ...

    jBPM实例开发 精品文档.docx

    《jBPM实例开发详解》 jBPM,全称为Java Business Process Management,是一款开源的工作流管理系统,用于设计、执行和管理业务流程。本文将深入探讨如何使用jBPM进行实例开发,包括创建基本流程、使用API管理和...

    java 枚举类总结

    ### Java 枚举类总结 #### 一、概述与基本概念 枚举类型(`enum`)是Java中的一种特殊类,它允许开发者定义一组命名的常量,并将其视为一个独立的类型。从JDK 1.5版本开始,Java引入了枚举类型,它提供了一种更加...

    Java线程中wait,await,sleep,yield,join用法总结.pdf

    await()、signal()和signalAll()是java.util.concurrent包下的Condition类的方法,它们也用于线程间的协调,但提供了比Object的wait()、notify()更为灵活的机制。 - await():使线程在Condition上等待,同时释放...

    Java enum的用法详细介绍及实例代码

    以下是对Java `enum`的详细用法和实例代码的深入解析。 **用法一:常量的定义和使用** 在Java 1.5之前,我们通常使用`public static final`关键字来定义常量。但自从引入`enum`后,我们可以将相关常量组织到一个...

    Java-Signals:Java Signals是基于Robert Penner针对AS3的Signals的事件管理系统

    每个事件只需要一个Signal实例,不需要额外的常量或子类。 事件侦听器直接注册到信号,而无需事件管理器和事件类型的基于字符串的表示。 接口允许在需要时轻松封装信号功能。 Java Signal的API是一个事件模型,可以...

    fundamental of statistical signal processing estimation theory

    本书"fundamental of statistical signal processing estimation theory"深入浅出地介绍了这些概念,并可能包含了大量的实例和算法实现,对于Java程序员来说,了解并掌握这些知识,不仅可以提升对数据的理解和处理...

Global site tag (gtag.js) - Google Analytics