该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
public class ThreadLocked implements Runnable{
boolean tag=true;//用于标记
private static Object A=new Object();//声明并初始化静态Object域A
private static Object B=new Object();//声明并初始化静态Object域B
public static void main(String[] args) throws InterruptedException
{
Runnable r1=new ThreadLocked();
Thread t1=new Thread(r1);
Runnable r2=new ThreadLocked();
Thread t2=new Thread(r2);
t1.start();
t2.start();
}
public void AccessA()
{
tag=false;
synchronized(A)//声明同步块,给对象A加锁
{
System.out.println("线程t1,我得到了A的锁");
try {
//让当前线程先休眠,让另一个线程获得B的锁
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("我还想得到B的锁");
synchronized(B)
{
System.out.println("线程t1,我得到了B的锁");
}
}
}
public void AccessB()
{
tag=true;
synchronized(B)//声明同步快,给对象B加锁
{
System.out.println("线程t2,我得到了B的锁");
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("线程t2,我还想得到B的锁");
synchronized(A)
{
System.out.println("线程T2,我得到了A的锁");
}
}
}
public void run()//Runnable的run方法被实现
{
if (tag) //如果tag为真,执行AccessA方法
{
AccessA();
}
else//否则执行AccessB方法
{
AccessB();
}
}
}