代码示例:
运行结果:
****
test2
等待5秒
====
test1
当使用同步方法时
运行结果:
等待5秒
====
test1
****
test2
[b]结论:
同步方法将当前对象做为同步锁,同步锁生效后该对象内所有的同步方法都不可被调用。[/b]
public class SyncTest
{
static Object obj = new Object();
public static void main(String[] args)
{
T1 t1 = new T1();
T2 t2 = new T2();
t1.start();
t2.start();
}
public static void test1()
{
synchronized(obj)
{
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.err.println("====");
System.err.println("test1");
}
}
public static synchronized void test2()
{
System.err.println("****");
System.err.println("test2");
}
}
class T1 extends Thread
{
public void run()
{
SyncTest.test1();
}
}
class T2 extends Thread
{
public void run()
{
SyncTest.test2();
}
}
运行结果:
****
test2
等待5秒
====
test1
当使用同步方法时
public static synchronized void test1()
{
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.err.println("====");
System.err.println("test1");
}
运行结果:
等待5秒
====
test1
****
test2
[b]结论:
同步方法将当前对象做为同步锁,同步锁生效后该对象内所有的同步方法都不可被调用。[/b]