chinawxd 2009-09-25 11:27
浏览 195
已采纳

关于static 的疑问

各位好,在下写了一个写文件的类,代码如下:
class LogOperator {

static String logFileName;

static void setLogFilenName(String logFileName) {

          LogOperator.logFileName = logFileName; 

          // 清空文件  代码略 
    } 

    static void writeLog(String message) { 
          // 写文件  代码略 
    } 

}

这里将logFileName设置为static,为了测试并发的情况,另外写了连个test类作测试。

这个类判断参数为1的情况下,先设置文件名为test1.log,然后等10秒钟,再写入内容到test1.log
如果参数不为1,则直接把test2.log作为参数传给Test2,并且往test2.log写入内容。
public class Test1 {
Timer timer;

public static void main(String[] args) {
if ("1".equals(args[0]))
new Test1("test1.log");
else {
Test2.main(new String[] {"test2.log"});
}
}

public Test1(String filename) {
LogOperator.setLogFilenName(filename);
timer = new Timer();
timer.schedule(new RemindTask(), 10 * 1000);

}

class RemindTask extends TimerTask {
public void run() {
LogOperator.writeLog("10 seconds!");
LogOperator.writeLog("test11111111111111");
timer.cancel();
}
}
}

public class Test2 {
public static void main(String[] args) {
LogOperator.setLogFilenName(args[0]);
LogOperator.writeLog("test222222222222222222222");
}
}

我把工程导出到一个可执行jar包,比如XXX.jar

然后我打开两个cmd窗口,在第一个窗口输入java -jar XXX.jar 1
在另一个窗口输入java -jar XXX.jar 2
按照预想,在第一个窗口执行参数为1的命令以后,设置logFileName为test1.log,然后开始等待;
这时候我在另一个窗口执行参数为2的命令后,首先设置logFileName为test2.log,然后往test2.log写入内容;
然后第一个窗口等待结束,开始写文件,因为logFileName是静态的,这时候应该已经被最后设置成了test2.log,所以第一个窗口应该也往test2.log里面写入内容。
不过执行的结果是,等待结束后仍然是往test1.log写入内容。

是否我对static的理解有错误,还是代码有什么问题,请各位指点,谢谢!

  • 写回答

1条回答 默认 最新

  • pcenshao_csto 2009-09-25 13:44
    关注

    如果我没看错的话
    你开启两个程序
    有两个进程

    这两个进程的用的数据 是在不一样的内存区域的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备