看你这个fun方法是什么级别的同步了是类级的还是对象级的,如果是对象级的,你对象A和对象B都是两个不同的对象了当然不会同步。如果是类级的同步,同步锁是字节码class,这个锁在内存中只有一份不管你同类的对象有几个都是同步的

解决方案 »

  1.   

    楼主你好,你的问题里面有一层深的含义呢,如果说你的那个类中的同步发放格式如下:class ThreadVO {
    public synchronized void fun() {
    System.out.println("ThreadVO.fun()");
    }
    }
    这个fun方法的同步锁是对象自身,jthis,所以不同的对象的锁不一样,不能实现同步。要实现不同对象同步,就必须提供一个全局的锁,让这个类的不同的对象都用这把锁,推荐代码如下:
    class ThreadVO {
    public void fun() {
    // 以类对象为锁,同一个ClassLoader中只有一个对象
    synchronized (ThreadVO.class) {
    System.out.println("ThreadVO.fun()");
    }
    }
    }
    希望楼主学习进步~