How bad is the following idea? class Calc { void addThread() { Data data; data = new Data(); } void run() { if ( hardware threads > current threadcount) { addThread(); } //wait for some signal //run calculations on data / threads } } Calc mainCalc; mainCalc = new Calc(); mainCalc.run();