synchronized(this)中的this 指的是什么?

解决方案 »

  1.   


    这是一个关于死锁的例子,当我把下面程序中的Synchronized(this)改成Synchronized(obj)时就不死锁了,程序一直在运行,无法结束,那这里的Synchronized(this)中的this指的是哪个对象啊,不懂啊,哪位高手指点一下啊,谢谢
    class ThreadTest{
       public static void main(String args[])
       {
          Mythread mt=new Mythread();
          new Thread(mt).start();
          new Thread(mt).start();
          new Thread(mt).start();
          new Thread(mt).start();
       }
    }
    class Mythread implements Runnable
    {
       Object obj=new Object();
       //Object obj1=new Object();
       int tickets=100;
       boolean flag=false;
       public void run()
       {
          if(flag=true)
          sell(obj);
          while(true)
          {   
             flag=true;
             synchronized(obj)
             {
                try
                {
                   Thread.sleep(10);
                   System.out.println(Thread.currentThread().getName()+",我已经休息了!");
                   synchronized(this)
                   {
                       System.out.println("我把this监视了!");
                   }
                }
                catch(Exception e)
                {
                   e.printStackTrace();
                }
              }
           }
        }
        
        
        public synchronized void sell(Object obj)
        {
           synchronized (obj)
           {
              if(tickets>0)
              {
                try
                {
                  Thread.sleep(10);
                  System.out.println(Thread.currentThread().getName()+"我已经休息了!");
                }
                catch(Exception e)
                {
                   e.printStackTrace();
                }
                System.out.println("sell():"+Thread.currentThread().getName()+"sell tickets:"+tickets);
                tickets--;
              }
              
            }
        }
    }
      

  2.   

    这里的this就是当前对象,我举个例子啊
    class A implements Runnable{
      public  void run(){
         synchronized(this){
         
         }
      }}
    class B{
      public static void main(String args[]){
      A a = new A();
      Thread b = new Thread(a);
      b.start();
      synchronized(a){   }
    }这里的this,和a 就是同一个对象,你在这两个同步方法快里面试验一下,就会看出来,二者用的是同一把锁
    }