转自:http://liuinsect.iteye.com/blog/1662839
package Thread.synchronizedTest;
public class SynchronizedTest {
/**
* 锁住class对象
*/
public static void synchronizedStatic(){
synchronized(SynchronizedTest.class){
System.out.println("synchronizedStatic");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 锁住方法,lock标记打在该实力上
*/
public synchronized void synchronizedMethod(){
System.out.println("synchronizedMethod");
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 不会有影响,正常调用
*/
public void synchronizedMethod2WithNosynchronized(){
System.out.println("synchronizedMethod2WithNosynchronized");
}
/**
* synchronizedMethod 已经锁住实例,
* 再加锁不成功
*/
public void synchronizedMethod2(){
synchronized( this ){
System.out.println("synchronizedMethod2");
try {
Thread.sleep(15000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* synchronizedMethod 已经锁住实例,
* 再加锁不成功
*/
public void synchronizedMethod3(){
synchronized( this ){
System.out.println("synchronizedMethod3");
}
}
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
final SynchronizedTest t= new SynchronizedTest();
Thread th = new Thread( new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
t.synchronizedStatic();
}
} );
th.start();
th = new Thread( new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
t.synchronizedMethod();
}
} );
th.start();
th = new Thread( new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
t.synchronizedMethod2();
}
} );
th.start();
t.synchronizedMethod2WithNosynchronized();
t.synchronizedMethod3();
}
}