public abstract class Port extends Thread
{
.......里面的代码
}
class Test2 
{
 
     public Test2 ()
    {
        
        port= null;
        
    }
    
    .......里面的代码
    public void setPort(Port port)
    {
        port = port;
    }    public Port getPort()
    {
        return port;
    }
   
   Port  port;
}
class Test extends  Test2
{
 
    
  synchronized(this)  [如果改成synchronized(super.port)有什么区别]  {
  .......里面的代码
  }
}

解决方案 »

  1.   

    为了说明的更清楚,修改如下:
    class Test extends Test2
    {    
     public static void main(String[] args) { thread = new Thread(Test );
    thread.start();
    }
     public void run() {   synchronized(this) [如果改成synchronized(super.port)有什么区别] {
      .......里面的代码
      }
    }
    }
      

  2.   

    从逻辑上感觉没有差别,因为Test2是test的父关,synchronized(this) 包含了synchronized(super.port),不知道我说的对不对
      

  3.   

    this或者port都是个钥匙,你1个thread进去了拿走钥匙,其他人进来如果是同一个对象就发现门锁了,必须等前面的方法跑完释放锁才能进入同步块
      

  4.   

    你的意思是 :如果是同一个对象   synchronized(this) 与synchronized(super.port)起到的作用是一样的?两者可以相互代替?
      

  5.   

    就是1个是对象锁 1个父类字段锁咯。
    synchronized(this) 包含了synchronized(super.port)
    这个类用的又不是父类的port,synchronized(super.port)没有任何作用
    如果这个类用了父类的port,synchronized(super.port)就起作用了
      

  6.   

    实际运用中 这个类用了父类的port,如果synchronized(super.port)就起作用,它与synchronized(this)有差异吗?