不考虑多个jvm的话,只要单例就行了。

解决方案 »

  1.   

    takecare(大厅) 
    如何保持单例呢??请详细讲讲
      

  2.   

    是不是你的类里有个功能
    但是在频繁调用这个类的时候
    你只希望在第一次调用的时候执行里面的代码
    实现某种功能
    而在第二次时不希望代码去执行?
    如果是这样的话
    可以在代码里写If(){}else{}来实现
      

  3.   

    比如,我想让整个jvm中只有一个beanFactory,只要这么写就能够保证了。
    public class BeanFactory {
    private static BeanFactory beanFactroy = new BeanFactory();

    private BeanFactory(){

    }

    /**
     * 获取业务操作bean工厂的实例
     * @return
     */
    public static BeanFactory getInstance(){
    return beanFactroy;
    }

    //其他的方法
    //......
    }同时推荐你们了解一些设计模式,这个就是单例singleton的典型用法。
      

  4.   

    tomuno(tomuno)  不是的 我是想在虚拟机里相同程序只跑一个,当该程序已经在运行时 ,有人再次运行程序,那么程序将不启动。就这样一个逻辑
      

  5.   

    takecare(大厅) 额 可能你误解了 好象你说的不是我要的逻辑 singleton我还是懂一点的
      

  6.   

    如果是“同步”或者“线性化”的话,只要synchronize就行了。
      

  7.   

    用文件锁或用JNI调特定平台的API如在WINDOWS用CreateEvent
      

  8.   

    我想到的也是文件锁,不过java好象并无独占试打开文件的方法?
    = = 是定期更新更新文件时间来保证? 这个方法偶总觉的是在绕路……
    ;)~不过有人放出参考也素万分感谢,恩,考虑我的东西要跑不同平台jni的路就不走了 = = 我懒
      

  9.   

    给takecare(大厅) 提个小小的意见,
    上面的这个singleton用法,稍微有一点点浪费。呵呵
      

  10.   

    to bcbboy(516),你的建议呢?说来听听。
      

  11.   

    = = 恩 用文件锁凑合先了 期待更直接的的方法 
    tomuno(tomuno) 你还没懂我的问题吧,还是问整个程序的入口?自然是main()罗
      

  12.   

    public class LockThread extends Thread {
        public static LockThread getInstance() {
            return locker;
        }    public void killLock() {
            stop = true;
        }    public void run() {
            while (!stop) {
                try {
                    Date de = new Date();
                    long timeNow = de.getTime();
                    FileOutputStream out = new FileOutputStream(FileNameManager.getFullPath(FileNameManager.FNM_LOCK_FILE));
                    String lockInfo = timeNow + "";
                    out.write(lockInfo.getBytes());
                    out.close();
                    Thread.sleep(5000);
                } catch (Exception e) {
                }
            }
            if (stop) {
                File lockFile = new File(FileNameManager.getFullPath(FileNameManager.FNM_LOCK_FILE));
                lockFile.delete();
            }
        }    private boolean stop = false;
        private static LockThread locker = new LockThread();
    }
    欢迎多多提建议
      

  13.   

    VC 里用一个什么什么类型(忘了)的变量就可以解决了JAVA 应该也有类似的吧现在在做web,没研究过application了
      

  14.   

    to  takecare(大厅) :public class BeanFactory {
         private static BeanFactory beanFactroy = null;
        
         private BeanFactory(){
        
         }
        
         public static BeanFactory getInstance(){
             if (beanFactroy==null)
                 beanFactroy=new BeanFactory();
         return beanFactroy;
         }    }没有抬杠的意思,呵呵,所以小小的建议
      

  15.   

    to:
      bcbboy
    不能说takecare的方法浪费,
    Singleton模式有三种实现方法,takecare的方法是lazy的那种,但是也是最常用的那种,因为你这种方法考虑到多线程访问的话,若两个thread同时getInstance()有可能产生多于一个instance,这样就达不到single的目的了,所以你的方法应该还要synchronized而且是只对getInstance的一部分synchronized,这样的话,代价不也上去了吗?
      

  16.   

    所知方法有二:A.文件锁. 简单点可以定时更新一个文件内容写时间,可以每10秒写一个当前时间进文件.程序运行前读此文件的内容判断是否是10秒前的,如YES或者没此文件则可运行程序.这个方法看似有点傻,但应该可以胜任,而实现也不复杂.B.端口锁.
    程序运行时打开一个端口进行监听,如成功则运行否则表示此程序已运行.这个方法实现也不复杂,只是要求对SOCKET监听有一定了解.
      

  17.   

    既然你的应用是一个thread,那么只要同步run()就行了,不必理会run()本身被运行了多少次。
    反正只要保证同时只有一个调用者能够进入到run就行了。
      

  18.   

    估计大伙没懂楼主的意思让程序只执行一次,就向msn,不能打开多个msn窗口的但是 QQ 就可以,楼主的意思可能是在当前情况下只能有一个窗口程序运行以前用VC做窗口程序可以用一个共享变量解决的不过通过在注册表或者配置文件里做一个标志同样能做到的
      

  19.   

    Singleton不行,文件锁或绑定端口,这里也有不少帖子关于这个话题的,搜索一下吧。
      

  20.   

    我给出的只是负责更新文件锁的线程而已 并不是全部
    这个线程充其量也就是个看锁员 被锁的是主线程 这里没写出来 太大了
    wplian(flrQ) 明白我的意思了vc里我也依稀记得比较容易处理,毕竟它可以直接去取系统的进程句柄从而得知目的进程是否在运行(好象是这样,好久没碰vc了,说错大家bs下就算了 呵呵)
    但java就没那么容易了,java可没有这个路子走的