1. A method for model checking of concurrent multi-threaded programs with bounded lock chains, comprising: analyzing individual program threads in a concurrent multi-threaded program, using a model checking program stored in a memory storage device, to determine sets of reachable states and lock access patterns for bounded lock chains by: tracking sets of states reachable from a given set of states; and tracking lock acquisitions and releases by maintaining a bi-directional lock causality graph; and using an acceptance condition of the lock causality graph to combine analysis results from multiple threads to determine whether there is a violation of a correctness property in the concurrent multi-threaded program.