public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Res r=Res.getInstance();
Out out=new Out(r);
In in=new In(r);
new Thread(out,"线程1").start();
new Thread(in,"线程2").start();
}
}
class In implements Runnable
{
Res r=null;
In(Res r){
this.r=r;
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true){
r.in();
}
}
}
class Out implements Runnable{
Res r=null;
Out(Res r){
this.r=r;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true)
{
if(r!=null){
r.out();
}
}
}
}
class Res//单列类
{
private int num=0;
private static final Res res=new Res();
private Res(){}
public static Res getInstance(){
return res;
}
Object a=new Object();
Object b=new Object();
public void setNum(int num){
this.num=num;
}
public int getNum(){
return num;
}
public void out(){//外部同步代码块持有a锁
synchronized(a){
System.out.println("chushu 1......."+Thread.currentThread().getName());
synchronized (b){//内部代码快持有b锁
System.out.println("chushu 1...111.111..."+Thread.currentThread().getName());
}
}
}
public void in(){
synchronized(b){//外部同步代码块持有b锁
System.out.println("chushu 2......."+Thread.currentThread().getName());
synchronized (a){//内部同步代码块持有a锁
System.out.println("chushu 2...2.1212..."+Thread.currentThread().getName());
}
}
}
}
|
|