代码示例:
运行结果:
****
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]
本文通过两个线程分别调用同步方法和同步代码块的示例,详细解释了Java中同步机制的工作原理。演示了如何使用synchronized关键字实现线程同步,并展示了同步锁的作用范围及效果。

被折叠的 条评论
为什么被折叠?



