Separation Logic for Multithreaded Object-Oriented Languages