public class Test {
public static String str;
/**
 * @param args
 */
public static void main(String[] args) throws Exception{
if(Test.aaa==null){
Test.str= "111";
}
else{
Test.str="222";
}
Thread.sleep(15000);
System.out.println(Test.aaa);
}}现在我运行这个程序(使用java命令),然后等待5秒,再运行这个程序(使用java命令),请问两次运行的结果分别是什么?
请问这两次运行的java虚拟机和runtime是同一个吗?

解决方案 »

  1.   

    不好意思,程序写错了一个地方:
    public class Test {
    public static String str;
    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
    if(Test.aaa==null){
    Test.str= "111";
    }
    else{
    Test.str="222";
    }
    Thread.sleep(15000);
    //System.out.println(Test.aaa);
                      System.out.println(Test.str);}}
      

  2.   

    java虚拟机对于操作系统而言实际上也是一个进程,
    java命令实际上是一个exe组件(对于WIN32),
    也就是说你每次执行java命令就会创建一个jvm进程。
    不同的jvm进程之间是互相隔离的,并不冲突。
    runtime是一个逻辑上的概念,每个jvm进程都会管理自己的runtime,
    但是runtime本身可能只有一套,但可以有多个实例。
    java的runtime实际上主要指rt.jar。
      

  3.   

    你的程序写错了吧!
    public class Test {
    public static String str;
    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
    if(Test.str==null){//这前是Test.aaa的
    Test.str= "111";
    }
    else{
    Test.str="222";
    }
    Thread.sleep(15000);
    //System.out.println(Test.aaa);
                      System.out.println(Test.str);}}
    程序运行完后,再执行的话,结果应该一样的
      

  4.   

    我明白楼上的意思了,单例多例都只针对一个jvm内部而言。
    那现在问题是这样,我写了一个批处理bat:内容为“java Test”
    我希望在某一个时刻Windows只有一个Test程序在运行,也就是说如果我双击两轮(一共点四下)这个bat程序,它只运行第一次,而第二次提示程序已经运行。
    这个怎么实现呢?
      

  5.   

    private  Test(){
    }
    Test getTest(){
        if(Test.str==null)
        return new Test();
    }
    main写到另外一个类里面去 TEST类作为单例类 书上有啊 翻本书看看
      

  6.   

    单例模式是类的创建模式,主要是用来创建某个类的唯一实例也不是用来做赋值的。
    还有楼主的本意应该是这样吧:
    public class Test
    {
        private static String str = null;
        
        public static void showStr()
        {
            if(Test.str == null){
                Test.str= "111";
            }
            else{
                Test.str="222";
            }
            Thread.sleep(15000);
            System.out.println(Test.str);
        }
        
        public static void main(String[] args)
        {
            Test.showStr();
            Test.showStr();
        }
    }
      

  7.   

    你所说的意思并不是设计模式的单例模式,那是针对一个jvm进程内部而言.如果要完成你的功能,可能考虑每次运行的时候生成临时文件的方法.
    每次启动查找此文件.如果有则报错.
      

  8.   

    呵呵,要楼主所说的“单例”,可以参考eclipse的做法,运行就生成一个文件,关闭时删除,如果有就表示已经运行了一个进程。缺点是强制退出后文件在,需要手工删除
      

  9.   

    什么是单例,是单例模式吗?
    singleton