Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 订户-如何取消订阅?_Java_Publish Subscribe_Java 9_Java.util.concurrent_Java Flow - Fatal编程技术网

Java 订户-如何取消订阅?

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

我正在使用JDK 9 Flow API创建一个用户事件系统,因此我有一个房间(实现
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{
....
公开发售(通知项目){
返回超级报价(项目,(子项,消息)->错误);
}
}
订阅。取消()
。我建议你读我的。