diff --git a/RxJava/practice/src/main/java/org/example/ex05/CompletableCreateEx.java b/RxJava/practice/src/main/java/org/example/ex05/CompletableCreateEx.java new file mode 100644 index 00000000..75a7ca9f --- /dev/null +++ b/RxJava/practice/src/main/java/org/example/ex05/CompletableCreateEx.java @@ -0,0 +1,52 @@ +package org.example.ex05; + +import io.reactivex.rxjava3.core.Completable; +import io.reactivex.rxjava3.core.CompletableEmitter; +import io.reactivex.rxjava3.core.CompletableObserver; +import io.reactivex.rxjava3.core.CompletableOnSubscribe; +import io.reactivex.rxjava3.disposables.Disposable; +import io.reactivex.rxjava3.schedulers.Schedulers; +import org.example.utils.LogType; +import org.example.utils.Logger; +import org.example.utils.TimeUtil; + +/** + * Completable 을 사용하여 어떤 작업을 수행한 후, 완료를 통지하는 예제 + */ +public class CompletableCreateEx { + public static void main(String[] args) throws InterruptedException { + Completable completable = Completable.create(new CompletableOnSubscribe() { + @Override + public void subscribe(CompletableEmitter emitter) throws Exception { + // 데이터를 통지하는것이 아니라 특정 작업을 수행한 후, 완료를 통지한다. + int sum = 0; + for(int i =0; i < 100; i++){ + sum += i; + } + Logger.log(LogType.PRINT, "# 합계: " + sum); + + emitter.onComplete(); + } + }); + + completable.subscribeOn(Schedulers.computation()) + .subscribe(new CompletableObserver() { + @Override + public void onSubscribe(Disposable disposable) { + // 아무것도 하지 않음 + } + + @Override + public void onComplete() { + Logger.log(LogType.ON_COMPLETE); + } + + @Override + public void onError(Throwable error) { + Logger.log(LogType.ON_ERROR, error); + } + }); + + TimeUtil.sleep(1000L); + } +} \ No newline at end of file diff --git a/RxJava/practice/src/main/java/org/example/ex05/CompletableLamdaEx.java b/RxJava/practice/src/main/java/org/example/ex05/CompletableLamdaEx.java new file mode 100644 index 00000000..24636218 --- /dev/null +++ b/RxJava/practice/src/main/java/org/example/ex05/CompletableLamdaEx.java @@ -0,0 +1,30 @@ +package org.example.ex05; + +import io.reactivex.rxjava3.core.Completable; +import io.reactivex.rxjava3.schedulers.Schedulers; +import org.example.utils.LogType; +import org.example.utils.Logger; +import org.example.utils.TimeUtil; + +public class CompletableLamdaEx { + public static void main(String[] args){ + Completable completable = Completable.create(emitter -> { + // 데이터를 발행하는것이 아니라 특정 작업을 수행한 후, 완료를 통지한다. + int sum = 0; + for(int i =0; i < 100; i++){ + sum += i; + } + Logger.log(LogType.PRINT, "# 합계: " + sum); + + emitter.onComplete(); + }); + + completable.subscribeOn(Schedulers.computation()) + .subscribe( + () -> Logger.log(LogType.ON_COMPLETE), + error -> Logger.log(LogType.ON_ERROR, error) + ); + + TimeUtil.sleep(1000L); + } +} \ No newline at end of file