Friday, August 8, 2008

Java > Threads > Thread syncronization

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();
}
}

No comments: