Design of Multithreaded Software: The Entity-Life Modeling Approach