首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中的并发编程

java中的并发编程
EN

Stack Overflow用户
提问于 2010-08-22 06:20:55
回答 3查看 275关注 0票数 2

我有2个线程在并行运行。线程的运行函数如下所示

代码语言:javascript
复制
public void run(){
    Runtime rt = Runtime.getRuntime();
    Process s;
    try {
      s = rt.exec("cd /.../somefolder/"+i+"/");
      closeStream(s); // this closes process s

      s = rt.exec("sh adapMs.sh");
      closeStream(s); // this closes process s
    } ...
}

adapMs.sh创建了一些文件夹、文件..在由行指定的当前目录下

代码语言:javascript
复制
  s = rt.exec("cd /.../somefolder/"+i+"/");

例如,thread1使用目录1。当thread1使用目录1时,另一个thread2执行该行

代码语言:javascript
复制
  s = rt.exec("cd /.../somefolder/"+i+"/");

这是目录2。

这会导致thread1在目录2下创建新文件,还是在目录1下创建文件夹?

换句话说,线程2会导致改变线程1的当前目录吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-22 06:32:39

我不确定您的解决方案是否可行,但这显然是用the intended way解决您在Java语言中的问题:

代码语言:javascript
复制
rt.exec("sh adapMs.sh", null, new File("/.../somefolder/" + i + "/"));

edit删除了'cd‘并添加了文件

票数 1
EN

Stack Overflow用户

发布于 2010-08-22 06:24:11

每个exec都在自己的线程和环境中运行。如果线程1在目录1中,它将留在目录1中(并且不受线程2的影响)。

票数 1
EN

Stack Overflow用户

发布于 2010-08-22 10:38:40

换句话说,线程2会导致改变线程1的当前目录吗?

外部进程的执行过程完全由操作系统决定,而不是由Java决定。

如果操作系统对"cd“命令的实现使得一个进程可以更改另一个进程的当前目录,那么这种情况就会发生。如果不是,那么它就不会。

据我所知,没有主流操作系统允许一个进程改变另一个进程的当前目录...所以在实践中,你的问题的答案是“不”。但在技术上最正确的答案应该是“检查您的操作系统/ shell文档”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3539254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档