When implementing this I thought about having a priority queue as an alternative, but this implementation was straightforward to implement and I wasn't sure whether it makes sense or not so I let it go.

After second thought it is clear that this is a bug:

Here is a unit test to reproduce it
``` java
    @Test
    public void testSched() {

        final Scheduler scheduler = Schedulers.currentThread();

        scheduler.schedule(new Action0() {
            @Override
            public void call() {
                scheduler.schedule(new Action0() {
                    @Override
                    public void call() {
                        System.out.println("one");
                    }
                }, 3, TimeUnit.SECONDS);

                scheduler.schedule(new Action0() {
                    @Override
                    public void call() {
                        System.out.println("two");
                    }
                }, 1, TimeUnit.SECONDS);
                System.out.println("scheduled");
            }
        });


    }
```

This prints out `one` and then `two` which is wrong.