java事件机制 性能_java事件机制

java事件机制

cdb5bdab130e86beff748f6561fcaf21.png

java事件机制包含三个角色:

1.event object: 事件对象,用于封装需要传递的数据

2.event listener: 用于接收事件对象

3.event source: 事件源

java事件机制工作机制:

首先事件监听器需要被注册到事件源中,当事件源状态发生变化时将相应的信息包装成事件对象并发送给所有注册的监听器。监听器收到对应的事件后执行相应的处理。需要特别说明的是,事件对象中包装了事件源对象。

简单示例

启动类package com.langdashu.learn.springboot.event;

/**

* java事件机制

*

* 1.event object: 事件对象,用于封装需要传递的数据

* 2.event listener: 用于接收事件对象

* 3.event source: 事件源

*

* 工作机制:

* 首先事件监听器需要被注册到事件源中,当事件源状态发生变化时将相应的信息包装成事件对象并发送给所有注册的监听器。监听器收到对应的事件后执行相应的处理。

* 需要特别说明的是,事件对象中包装了事件源对象。

*/

public class Main{

public static void main(String[] args){

Application application = new Application();

application.register(new StartListener("ListenerA"));

application.register(new StartListener("ListenerB"));

application.start();

}

}

事件源类package com.langdashu.learn.springboot.event;

import java.util.ArrayList;

import java.util.List;

import java.util.logging.Logger;

public class Application{

private final List listeners = new ArrayList<>();

public void start(){

Logger.getGlobal().info("application start");

notifyStart();

}

public void register(StartListener listener){

listeners.add(listener);

}

public void unregister(StartListener listener){

listeners.remove(listener);

}

private void notifyStart(){

StartEvent event = new StartEvent(this, System.currentTimeMillis());

listeners.forEach(listener -> listener.onEvent(event));

}

}

事件对象类package com.langdashu.learn.springboot.event;

import java.util.EventObject;

public class StartEvent extends EventObject{

private long time;

public StartEvent(Object source, long time){

super(source);

this.time = time;

}

public long getTime(){

return time;

}

public void setTime(long time){

this.time = time;

}

}

事件监听器类package com.langdashu.learn.springboot.event;

import java.util.EventListener;

import java.util.logging.Logger;

public class StartListener implements EventListener{

private String name;

public StartListener(String name){

this.name = name;

}

public void onEvent(StartEvent event){

Logger.getGlobal().info(this.name + " receive the start time: " + event.getTime());

}

}

运行结果一月 18, 2021 11:47:25 下午 com.langdashu.learn.springboot.event.Application start

信息: application start

一月 18, 2021 11:47:25 下午 com.langdashu.learn.springboot.event.StartListener onEvent

信息: ListenerA receive the start time: 1610984845537

一月 18, 2021 11:47:25 下午 com.langdashu.learn.springboot.event.StartListener onEvent

信息: ListenerB receive the start time: 1610984845537

2021-01-18 23:47:41

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值