CodeBlanks Logo Icon CodeBlanks

SubmissionPublisher

SubmissionPublisher ile veri yayını öğrenirsin.

SubmissionPublisher

SubmissionPublisher, JDK'nın hazır Publisher uygulamasıdır. Kendi Publisher sınıfını yazmadan asenkron akış oluşturmayı kolaylaştırır. submit ile öğe gönderilir, close ile akış kapatılır.

Örnek: SubmissionPublisher<String> pub = new SubmissionPublisher<>(). pub.subscribe(sub) ile abone eklenir, pub.submit("veri") ile öğe gönderilir. SubmissionPublisher öğeleri bir iş parçacığı havuzunda asenkron dağıtır. Bu yüzden akışın tamamlanmasını beklemek için close sonrası kısa bir bekleme gerekebilir.

Abone sayısını izleme

Bir SubmissionPublisher'a kaç abone eklendiği getNumberOfSubscribers ile öğrenilir. Bu, birden çok aboneyi yöneten sistemlerde yararlıdır. Ayrıca getSubscribers abone listesini verir.

Örnek: pub.subscribe(a); pub.subscribe(b); sonrası pub.getNumberOfSubscribers() iki döner. Bu değer, abonelikten çıkma işleminden sonra azalır. Böylece yayıncının o anki abone sayısını senkron olarak izlemek mümkündür.

Uygulama Abone sayısını yazdır

Bir EmptySubscriber sınıfı tanımla: Subscriber<String> arayüzünü uygulasın (yöntemler boş kalsın, onSubscribe request(1) yapsın). main içinde new SubmissionPublisher<String>() oluştur, bir EmptySubscriber abone ekle ve getNumberOfSubscribers sonucunu System.out.println ile yazdır. Sonra pub.close() ile kapat.

Başlangıç kodu

Main.java
// SubmissionPublisher oluştur
// bir abone ekle
// abone sayısını yazdır

Örnek çözüm

Main.java
import java.util.concurrent.SubmissionPublisher;
import java.util.concurrent.Flow.*;

class EmptySubscriber implements Subscriber<String> {
    public void onSubscribe(Subscription s) { s.request(1); }
    public void onNext(String v) { }
    public void onError(Throwable t) { }
    public void onComplete() { }
}

public class SubmissionDemo {
    public static void main(String[] args) {
        SubmissionPublisher<String> pub = new SubmissionPublisher<>();
        pub.subscribe(new EmptySubscriber());
        System.out.println(pub.getNumberOfSubscribers());
        pub.close();
    }
}

Beklenen çıktı

1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 SubmissionPublisher oluştur

Soru
SubmissionPublisher<String> pub = ____<>();
Cevap
SubmissionPublisher<String> pub = new SubmissionPublisher<>();

Açıklama: new SubmissionPublisher hazır bir yayıncıdır.

2 SubmissionPublisher yöntemlerini eşleştir

Kavram Anlamı
SubmissionPublisher Hazır Publisher
submit Öğe gönderir
subscribe Abone ekler
close Akışı kapatır

3 SubmissionPublisher neyi kolaylaştırır?

  • Dosya okuma
  • Publisher oluşturma Doğru cevap
  • Dizgi kodlama
  • Yol işlemleri

Açıklama: SubmissionPublisher hazır bir Publisher uygulamasıdır.

Uzman bölümündeki tüm dersler