A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jk7130866 中级黑马   /  2015-7-25 12:58  /  355 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



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());
                               
                        }
                       
                }
               
        }
       
}

3 个回复

倒序浏览
来 看看
回复 使用道具 举报
自己定自己
回复 使用道具 举报
互相锁,却又互相访问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马