package
one.two.tree;
import java.util.concurrent.TimeUnit;
public class Resource1 ... {
public void f() ...{
// other operations should not be locked...
System.out.println(Thread.currentThread().getName()
+ ":not synchronized in f()");
synchronized (this) ...{
for (int i = 0; i < 5; i++) ...{
System.out.println(Thread.currentThread().getName()
+ ":synchronized in f()");
try ...{
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) ...{
e.printStackTrace();
}
}
}
}
public void g() ...{
// other operations should not be locked...
System.out.println(Thread.currentThread().getName()
+ ":not synchronized in g()");
synchronized (this) ...{
for (int i = 0; i < 5; i++) ...{
System.out.println(Thread.currentThread().getName()
+ ":synchronized in g()");
try ...{
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) ...{
e.printStackTrace();
}
}
}
}
public void h() ...{
// other operations should not be locked...
System.out.println(Thread.currentThread().getName()
+ ":not synchronized in h()");
synchronized (this) ...{
for (int i = 0; i < 5; i++) ...{
System.out.println(Thread.currentThread().getName()
+ ":synchronized in h()");
try ...{
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) ...{
e.printStackTrace();
}
}
}
}
public static void main(String[] args) ...{
final Resource1 rs = new Resource1();
new Thread() ...{
public void run() ...{
rs.f();
}
}.start();
new Thread() ...{
public void run() ...{
rs.g();
}
}.start();
rs.h();
}
}
import java.util.concurrent.TimeUnit;
public class Resource1 ... {
public void f() ...{
// other operations should not be locked...
System.out.println(Thread.currentThread().getName()
+ ":not synchronized in f()");
synchronized (this) ...{
for (int i = 0; i < 5; i++) ...{
System.out.println(Thread.currentThread().getName()
+ ":synchronized in f()");
try ...{
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) ...{
e.printStackTrace();
}
}
}
}
public void g() ...{
// other operations should not be locked...
System.out.println(Thread.currentThread().getName()
+ ":not synchronized in g()");
synchronized (this) ...{
for (int i = 0; i < 5; i++) ...{
System.out.println(Thread.currentThread().getName()
+ ":synchronized in g()");
try ...{
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) ...{
e.printStackTrace();
}
}
}
}
public void h() ...{
// other operations should not be locked...
System.out.println(Thread.currentThread().getName()
+ ":not synchronized in h()");
synchronized (this) ...{
for (int i = 0; i < 5; i++) ...{
System.out.println(Thread.currentThread().getName()
+ ":synchronized in h()");
try ...{
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) ...{
e.printStackTrace();
}
}
}
}
public static void main(String[] args) ...{
final Resource1 rs = new Resource1();
new Thread() ...{
public void run() ...{
rs.f();
}
}.start();
new Thread() ...{
public void run() ...{
rs.g();
}
}.start();
rs.h();
}
}