如果可能有多个用户共享此对象实例,那就需要加上synchronized,如同Vector!
至于不重复,可以使用数据库技术解决

解决方案 »

  1.   

    可以定义一个static的属性作同步对像,如果数据库外部影响小的话,未使用的值可以缓存到内存中,对内存的操作比数据库快很多,写一个同步方法专门取该值,取了值后在内存标示该值已使用,这样同步的范围会减小很多
      

  2.   

    用singleton可以解决,应为在同一时刻只能有一个实例存在。
      

  3.   

    to楼主:每个客户端都生成同一个类的一个对象,起不到作用。
    你可以将这个类作为1个单例类,所谓单例类就是这个类只有一个实例,取得这个类的实例可以使classname.getInstance()方法。(一般都是这样命名)
    eg:
    public class Singleton {
      static private Singleton instance;
      //使用私有构造子是为了用户不能随便创建Singleton 实例
      private Singleton() {
        //your code
      }
      //这里是关键,得到Singleton 实例
      public synchronized static Singleton getInstance(){
        if(instance==null){
          System.out.println("Create new object");
          instance=new Singleton();
        }
        return instance;
      }
      }
    上面是类的单例模式的典型构造方法。还有一种比较简单的:
    public class Singleton {
      static private Singleton instanc=new Singleton();
      //使用私有构造子是为了用户不能随便创建Singleton 实例
      private Singleton() {
        //your code
      }
      //这里是关键,得到Singleton 实例,这个不需要同步,因为前面声明instanc的时候已经创建了实例
      public synchronized static Singleton getInstance(){
        return instance;
      }
      }剩下的工作就是在这个类里面加入你需要同步的方法。
    注意public synchronized static Singleton getInstance()是为了得到单一的类的实例
    如果要保证线程安全,你还要加上你的同步方法