import java.util.concurrent.Flow.Subscriber;
import java.util.concurrent.Flow.Subscription;
import java.util.concurrent.SubmissionPublisher;
class
MySubscriber<T>
implements
<strong>Subscriber<T></strong> {
private
<strong>Subscription </strong>subscription;
private
String name;
public
MySubscriber(String name) {
this.name = name;
}
<strong>@Override</strong>
public
void <strong>onComplete()</strong> {
System.out.println(name +
": onComplete"
);
}
<strong>@Override</strong>
public
void <strong>onError</strong>(Throwable t) {
System.out.println(name +
": onError"
);
t.printStackTrace();
}
<strong> @Override</strong>
public
void <strong>onNext</strong>(T msg) {
System.out.println(name +
": "
+ msg.toString() +
" received in onNext"
);
subscription.<strong>request</strong>(1);
}
<strong>@Override</strong>
public
void <strong>onSubscribe</strong>(Subscription subscription) {
System.out.println(name +
": onSubscribe"
);
this.subscription = subscription;
subscription.<strong>request</strong>(1);
}
}
<strong>
public
class
FlowTest {
public
static
void main(String args[]) {
<strong>SubmissionPublisher<String></strong> publisher =
new
<strong>SubmissionPublisher</strong><>();
MySubscriber<String> subscriber =
new
MySubscriber<>(
"Mine"
);
MySubscriber<String> subscriberYours =
new
MySubscriber<>(
"Yours"
);
MySubscriber<String> subscriberHis =
new
MySubscriber<>(
"His"
);
MySubscriber<String> subscriberHers =
new
MySubscriber<>(
"Her"
);
publisher.<strong>subscribe</strong>(subscriber);
publisher.<strong>subscribe</strong>(subscriberYours);
publisher.<strong>subscribe</strong>(subscriberHis);
publisher.<strong>subscribe</strong>(subscriberHers);
publisher.<strong>submit</strong>(
"One"
);
publisher.<strong>submit</strong>(
"Two"
);
publisher.<strong>submit</strong>(
"Three"
);
publisher.<strong>submit</strong>(
"Four"
);
publisher.<strong>submit</strong>(
"Five"
);
try
{
Thread.sleep(1000);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
publisher.close();
}
}