I'm new to RX java and I've been experimenting with observeOn and subscribeOn methods. I've read that the difference between them is that they affect the whole chain(subscribeOn) or only the part of the chain after setting a scheduler(observeOn). So why the code below executes fine (prints the current thread):

```
Observable obs = Observable.from(Arrays.asList("element", "2nd element"));
obs.observeOn(Schedulers.newThread())
                .map(x -> x.toString().toUpperCase())
                .subscribe(x -> System.out.println("NT:" + Thread.currentThread().getName() + x));

```

while this code doesn't print anything:

```
Observable obs = Observable.from(Arrays.asList("element", "2nd element"));
obs.subscribeOn(Schedulers.newThread())
            .map(x -> x.toString().toUpperCase())
            .subscribe(x -> System.out.println("NT:" + Thread.currentThread().getName() + x));

```