1. A computer-implemented method to refactor a software application, the computer-implemented method comprising: executing, with a processor on an information processing system, the following accessing at least a portion of an original software application that can execute in an operating environment where there are more two or more time-shared threads of execution; determining if there is at least one lock used in the original software application to enforce limits on accessing a resource; in response to determining there is at least one lock with a first type of construct with a given set of features, refactoring at least a portion of the original software application with the lock to preserve external functional behavior of a refactored software application such that the refactored software application is functionally equivalent before and after the refactoring for each concurrent user in a set of at least two concurrent users of the refactored software application with the two or more time-shared threads of execution, by identifying at least one use of the first type of construct for the lock, and further identifying all uses of that first type of construct for the lock in the original software application which must be refactored together in order to preserve external functional behavior in all possible cases; reassigning the lock to one of a set of lock usages with a second type of construct; and transforming the lock usages in the first type of construct for the lock that have been identified to the second type of construct for that lock, such that the second type of construct for the lock is always acquired and released whenever the first type of construct for the lock was in the original software application.