关于static的疑问

chinawxd 2009-09-25 10:43:40
各位好,在下写了一个写文件的类,代码如下:
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的理解有错误,还是代码有什么问题,请各位大侠帮忙看一下,谢谢!
分不是很多,不好意思啊!
...全文
52 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
magicbu 2009-09-25
  • 打赏
  • 举报
回复
然后我打开两个cmd窗口,在第一个窗口输入java -jar XXX.jar 1
在另一个窗口输入java -jar XXX.jar 2

-----------------------------------
你这样不是开了两个程序吗,即使是static也只是作用于一个程序里,怎么能跨进程使用呢
chinawxd 2009-09-25
  • 打赏
  • 举报
回复
OK,我也发觉是这个问题了,呵呵!
不过还是谢谢回答!

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧