1. In a computing environment, a method performed on at least one processor, comprising: a) testing a concurrent program with a plurality of thread schedules to find at least one concurrency bug, including inserting priority lowering points into the concurrent program, and assigning thread priorities via mathematical distribution; b) running a currently highest priority thread that is able to run until a priority lowering point is reached; c) lowering the priority of that thread when the priority lowering point is reached to change the currently highest priority thread to a different thread, including setting the thread's priority to a priority value assigned to the lowering priority point that was reached; and d) returning to step b) until a stopping condition is met.