Ahoj, pěkný článek! Jenom poznámka k použití Runnable v příkladu - mělo by odpovídat korektnímu použití, aby byl příklad správný.
Tedy místo
Runnable r = #{ System.out.println("Blah") };
r.run();
by mělo být
Runnable r = #{ System.out.println("Blah") };
new Thread(r).start();
Co do toho motáte SCJP? Na rozhraní Runnable není naprosto nic zvláštního, a pokud se autor nesnažil spustit vlákno, proč by prostě nemohl zavolat jeho metodu? Runnable je prostě objekt reprezentující kód, a jestli chci nebo nechci spustit jeho kód v samostatném vlákně přeci ani nemusím v okamžiku psaní kódu vědět.