Java 模拟消息驱动
1、定义消息接收接口
// ========================== // 1. 消息接收接口(你要的:单独接口) // ========================== public interface IMessageReceiver { // 消息到达时被调用 void onMessage(String message); }
2、实现消息接收
import lombok.extern.slf4j.Slf4j; // ========================== // 2. 接口实现类(你要的:单独实现类) // ========================== @Slf4j public class MessageReceiverImpl implements IMessageReceiver { // 真正的消息处理逻辑 @Override public void onMessage(String message) { log.info("【实现类处理消息】" + message); } }
3、消息处理中心
import java.util.concurrent.*; // ========================== // 1. 消息中心(纯内存,无中间件) // 真正的消息驱动:消息到达 → 自动唤醒执行 // ========================== public class MessageCenter { // 【真正安全】标准线程池,固定2个核心线程,队列容量10 private static final ThreadPoolExecutor executor = new ThreadPoolExecutor( 2, // 核心线程 4, // 最大线程 60L, TimeUnit.SECONDS, // 空闲回收 new ArrayBlockingQueue<>(10) // 任务队列 ); private static IMessageReceiver receiver; // 【处理方】注册:我要接收消息 public static void register(IMessageReceiver r) { receiver = r; } // 【发送方】发送:只发消息,不关心处理 public static void send(String msg) { // 关键:消息到达 → 系统自动唤醒执行,无循环、无等待 executor.execute(() -> { if (receiver != null) { receiver.onMessage(msg); // 自动回调 } }); } }
4、主程序
import lombok.extern.slf4j.Slf4j; // ========================== // 主程序(无阻塞、无轮询) // ========================== @Slf4j public class TrueMessageDriven { public static void main(String[] args) { System.out.println("主线程开始"); // 1. 创建 接口实现类 IMessageReceiver receiver = new MessageReceiverImpl(); // 2. 注册到总线 MessageCenter.register(receiver); // 发送消息 MessageCenter.send("用户登录成功"); for (int i = 0; i < 10; i++) { MessageCenter.send("文件下载完成"); try { Thread.sleep(1000); } catch (InterruptedException e) { log.error("线程中断", e); } } log.info("主线程结束,不阻塞、不轮询、无中间件"); } }
有些事情,没经历过不知道原理,没失败过不明白奥妙,没痛苦过不了解真谛。临渊羡鱼,不如退而结网!

浙公网安备 33010602011771号