### Question:
Part3MultithreadingParallelization { @Complexity(EASY) public static Publisher<String> subscribeOnSingleThreadScheduler(Callable<String> blockingCall) { 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 subscribeOnSingleThreadSchedulerTest() { Thread[] threads = new Thread[1]; StepVerifier .create(subscribeOnSingleThreadScheduler(() -> { System.out.println("Threads:" + Thread.currentThread().getName()); threads[0] = Thread.currentThread(); return "Hello"; })) .expectSubscription() .expectNext("Hello") .verifyComplete(); Assert.assertTrue( "Expected execution on different Threads", !threads[0].equals(Thread.currentThread()) ); }