Thread synchronization
public class TwoObjects extends Object { private String objID; public TwoObjects(String objID) { this.objID = objID; } public synchronized void synchronizedMethod(int val) { print("entering synchronized method()"); int num = val * 2 + objID.length(); print("in doStuff() - local variable num=" + num); try { Thread.sleep(2000); } catch (InterruptedException x) { } print("leaving synchronized method"); } public void print(String msg) { threadPrint("objID=" + objID + " - " + msg); } public static void threadPrint(String msg) { String threadName = Thread.currentThread().getName(); System.out.println(threadName + ": " + msg); } public static void main(String[] args) { final TwoObjects obj1 = new TwoObjects("obj1"); final TwoObjects obj2 = new TwoObjects("obj2"); Runnable runA = new Runnable() { public void run() { obj1.synchronizedMethod(3); } }; Thread threadA = new Thread(runA, "threadA"); threadA.start(); try { Thread.sleep(200); } catch (InterruptedException x) { } Runnable runB = new Runnable() { public void run() { obj2.synchronizedMethod(7); } }; Thread threadB = new Thread(runB, "threadB"); threadB.start(); } }