introduced barrier between setUp() and tearDown() phases, requiring explicit call to runThreads() from child classes - allows for additional child-specific set-up before running threads