spring boot 使用ConcurrentLinkedQueue实现发布订阅
时间: 2024-04-24 13:26:00 浏览: 8
要使用 `ConcurrentLinkedQueue` 实现发布订阅模式,你可以创建一个 `EventBus` 类,其中包含一个 `ConcurrentLinkedQueue` 作为事件队列,并提供相应的方法来发布事件和订阅事件。以下是一个简单的示例:
```java
import java.util.concurrent.ConcurrentLinkedQueue;
public class EventBus {
private ConcurrentLinkedQueue<EventListener> listeners;
public EventBus() {
listeners = new ConcurrentLinkedQueue<>();
}
public void subscribe(EventListener listener) {
listeners.add(listener);
}
public void unsubscribe(EventListener listener) {
listeners.remove(listener);
}
public void publishEvent(Object event) {
for (EventListener listener : listeners) {
listener.onEvent(event);
}
}
}
```
然后,你可以创建一个 `EventListener` 接口或抽象类,让其他类实现该接口或继承该类,并在需要监听事件的地方注册为订阅者。以下是一个示例:
```java
public interface EventListener {
void onEvent(Object event);
}
```
现在,你可以在需要发布事件的地方创建一个 `EventBus` 实例,并使用其 `publishEvent` 方法来发布事件。订阅者可以实现 `EventListener` 接口,并通过调用 `subscribe` 方法注册为订阅者。当事件被发布时,订阅者的 `onEvent` 方法会被调用。
以下是一个简单的示例,展示了如何使用 `EventBus` 实现发布订阅模式:
```java
public class MyApp {
public static void main(String[] args) {
EventBus eventBus = new EventBus();
// 创建订阅者
EventListener listener1 = new EventListener() {
@Override
public void onEvent(Object event) {
System.out.println("Listener 1: Event received: " + event.toString());
}
};
EventListener listener2 = new EventListener() {
@Override
public void onEvent(Object event) {
System.out.println("Listener 2: Event received: " + event.toString());
}
};
// 注册订阅者
eventBus.subscribe(listener1);
eventBus.subscribe(listener2);
// 发布事件
eventBus.publishEvent("Hello, world!");
}
}
```
当运行 `MyApp` 类时,会输出以下内容:
```
Listener 1: Event received: Hello, world!
Listener 2: Event received: Hello, world!
```
这就是使用 `ConcurrentLinkedQueue` 实现发布订阅模式的简单示例。你可以根据具体需求进行扩展和定制。