"use ConcurrentHashMap rather than HashMap as your default Map; use a BlockingQueue to pass things between threads without having to think about synchronization to share the data; GC is dirt cheap now for short-lived objects so don't think twice about copying out data to a temporary object for manipulation or iterating; and so on."
"It is easier to horizontally scale processes than threads - the inter-process communication is solved so it is often just a matter of moving and reconfiguring."