Believe me, I mean no disrespect, but I really mean that my professor who taught the concurrent programming class I took knows more about these issues than you do. While many applications use threading and do fine with it you are still only describing very simple applications from a resource management point of view. Whenever we are talking about more complex resource management issues, or just a little bit more complicated situations such as the famous problem presented at
http://java.sun.com/applets/archive/beta/DiningPhilosophers/ things quickly get harier. And complicated threaded applications really is one of those areas were just slugging it out isn't good enough, it takes planning, experience, and skill.