Java 订户-如何取消订阅?
我正在使用JDK 9 Flow API创建一个用户事件系统,因此我有一个房间(实现Java 订户-如何取消订阅?,java,publish-subscribe,java-9,java.util.concurrent,java-flow,Java,Publish Subscribe,Java 9,Java.util.concurrent,Java Flow,我正在使用JDK 9 Flow API创建一个用户事件系统,因此我有一个房间(实现Flow.Subscriber),它可能有许多用户,每个用户可以随时提供(分派)更新 当用户进入房间时,我订阅房间的更新user.subscribe(this)。但是没有退订,当用户离开房间时,我如何退订 public abstract class Room implements Flow.Subscriber<Notification> { private Flow.Subscription
Flow.Subscriber
),它可能有许多用户,每个用户可以随时提供(分派)更新
当用户进入房间时,我订阅房间的更新user.subscribe(this)
。但是没有退订,当用户离开房间时,我如何退订
public abstract class Room implements Flow.Subscriber<Notification> {
private Flow.Subscription subscription;
public void addUser(User user) {
user.subscribe(this);
}
public void removeUser(User user) {
// How can I unsubscribe the user?
}
@Override
public void onSubscribe(final Flow.Subscription subscription) {
this.subscription = subscription;
subscription.request(1);
}
@Override
public void onError(final Throwable throwable) {
// ...
}
@Override
public void onNext(final Notification notification) {
// ...
subscription.request(1);
}
@Override
public void onComplete() {
// User left
}
}
public抽象教室实现Flow.Subscriber{
私有流。订阅;
public void addUser(用户){
用户。订阅(本);
}
public void removeUser(用户用户){
//如何取消用户的订阅?
}
@凌驾
订阅时的公共作废(最终流订阅){
this.subscription=订阅;
认购请求书(1);
}
@凌驾
公共作废登记员(最终可丢弃){
// ...
}
@凌驾
public void onNext(最终通知){
// ...
认购请求书(1);
}
@凌驾
未完成的公共空间(){
//用户左
}
}
用户类别:
public class User extends SubmissionPublisher<Notification> {
....
public int offer(Notification item) {
return super.offer(item, (sub, msg) -> false);
}
}
公共类用户扩展SubmissionPublisher{
....
公开发售(通知项目){
返回超级报价(项目,(子项,消息)->错误);
}
}
订阅。取消()
。我建议你读我的。