Recommended: Sing it, brah! 5 fabulous songs for developers
JW's Top 5
example code from "Java The Programming Language (3rd)"
public class Friendly {
private Friendly partner;
private String name;
public Friendly(String name) {
this.name = name;
}
public synchronized void hug() {
System.err.println(Thread.currentThread().getName()
+ " in " + name + ".hug() trying to invoke "
+ partner.name + ".hugback()");
partner.hugback();
}
private synchronized void hugback() {
System.out.println(Thread.currentThread().getName()
+ " in " + name + ".hugback()");
}
public void becomdeFriend(Friendly partner) {
this.partner = partner;
}
public static void main(String[] args) {
final Friendly jareth = new Friendly("jareth");
final Friendly cory = new Friendly("cory");
jareth.becomdeFriend(cory);
cory.becomdeFriend(jareth);
new Thread(new Runnable() {
public void run() {
jareth.hug();
}
}, "Thread1").start();
new Thread(new Runnable() {
public void run() {
cory.hug();
}
}, "Thread2").start();
}
}Obviously, it may come to a deadlock.
But when it works ok, sometimes it gives result like:
run:
Thread1 in cory.hugback()
Thread1 in jareth.hug() trying to invoke cory.hugback()
Thread2 in cory.hug() trying to invoke jareth.hugback()
Thread2 in jareth.hugback()
BUILD SUCCESSFUL (total time: 0 seconds) run:
Thread1 in cory.hugback()
Thread2 in jareth.hugback()
Thread1 in jareth.hug() trying to invoke cory.hugback()
Thread2 in cory.hug() trying to invoke jareth.hugback()
BUILD SUCCESSFUL (total time: 0 seconds) I can't figure out the order of the messages. How can it be ?
Can you give me explanation?
Thanks in advance.