### Question:
Part3MultithreadingParallelization { @Complexity(EASY) public static Publisher<String> publishOnParallelThreadScheduler(Flux<String> source) { throw new RuntimeException("Not implemented"); }  @Complexity(EASY) static Publisher<String> publishOnParallelThreadScheduler(Flux<String> source); @Complexity(EASY) static Publisher<String> subscribeOnSingleThreadScheduler(Callable<String> blockingCall); @Complexity(EASY) static ParallelFlux<String> paralellizeWorkOnDifferentThreads(Flux<String> source); @Complexity(HARD) static Publisher<String> paralellizeLongRunningWorkOnUnboundedAmountOfThread(Flux<Callable<String>> streamOfLongRunningSources);  }### Answer:
@Test public void publishOnParallelThreadSchedulerTest() { Thread[] threads = new Thread[2]; StepVerifier .create(publishOnParallelThreadScheduler(Flux.defer(() -> { threads[0] = Thread.currentThread(); return Flux.just("Hello"); }))) .expectSubscription() .expectNext("Hello") .verifyComplete(); Assert.assertTrue( "Expected execution on different Threads", !threads[0].equals(threads[1]) ); }