This is part of JavaUnitTestChallengeSolved. -- DonWells ---- I use two arrays to hold my threads, 10 each. public class T''''''wentyThreadsTogether extends Test { public BoundedBuffer buffer; public P''''''utThread putThreads []; public T''''''akeThread takeThreads []; public void setUp(){ buffer = new BoundedBuffer(); putThreads = new P''''''utThread [10]; takeThreads = new T''''''akeThread [10]; for (int each = 0; each < 10; each++) { putThreads[each] = new P''''''utThread(buffer); takeThreads[each] = new T''''''akeThread(buffer);}} public void tearDown(){ for (int each = 0; each < 10; each++) { putThreads[each].stop(); takeThreads[each].stop();}} public void runTest (){ T''''''akeThread.resetOutput(); for (int each = 0; each < 10; each++) { takeThreads[each].start();}; for (int each = 0; each < 10; each++) { putThreads[each].start();}; waitForTakeToFinish(); should(T''''''akeThread.outputLength() == 50, "output was too short"); should(T''''''akeThread.doesOuputHaveTenOf("a"), "should get ten a"); should(T''''''akeThread.doesOuputHaveTenOf("b"), "should get ten b"); should(T''''''akeThread.doesOuputHaveTenOf("c"), "should get ten c"); should(T''''''akeThread.doesOuputHaveTenOf("d"), "should get ten d"); should(T''''''akeThread.doesOuputHaveTenOf("e"), "should get ten e");} public void waitForTakeToFinish(){ try { for (int each = 0; each < 10; each++) { takeThreads[each].join(4000);}} catch (InterruptedException exception) {};} } I also modified the T''''''akeThread so that it can hold 50 strings of output and added the doesOuputHaveTenOf method, which is almost identical to the two version. I refactored out the part which counts how many of a string there are into a separate method. public static boolean doesOuputHaveTwoOf (String aValue){ return howManyOf(aValue) == 2;} public static boolean doesOuputHaveTenOf (String aValue){ return howManyOf(aValue) == 10;} public static int howManyOf (String aValue){ int howMany = 0; for (int each = 0; each < outputLength; each++){ if (output[each] == aValue) howMany++;} return howMany;} public static String outputString (){ String outputAsString = ""; for (int each = 0; each < outputLength; each++){ outputAsString += output[each];}; return outputAsString;} public static int outputLength(){ return outputString().length();} Now I can try it. This test runs just fine too. http://members.aol.com/jdwells123/twentypass.gif