2010-08-21 43 views
2

我有2个线程在paralel中运行。螺纹的运行功能如下java中的并发编程

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创建一些文件夹,其由线

s = rt.exec("cd /.../somefolder/"+i+"/"); 

指定例如线程1当前目录下文件..使用目录1虽然线程1使用目录1,另一个线程2执行线

s = rt.exec("cd /.../somefolder/"+i+"/"); 

这是目录2.

这是否会导致thread1在目录2下创建它的新文件,或者它创建目录1下的文件夹,文件?

换句话说,线程2是否会导致更改thread1的当前目录?

+0

'Runtime.exec'启动一个子进程,如果你在子进程中运行'cd',它不会影响Java程序本身的当前目录,也不会影响使用'exec'运行的任何其他子进程。 – 2010-08-21 23:43:13

回答

1

不知道你的解决方案是否可行,但这显然the intended way解决在Java中你的问题:

rt.exec("sh adapMs.sh", null, new File("/.../somefolder/" + i + "/")); 

编辑删除“CD”,并添加文件

+0

您的解决方案肯定有效。我放弃了我的soln'。 s = rt.exec(“sh adapMs.sh”,null,new File(“/ somefolder /”));作品。 – ogzylz 2010-08-21 22:44:52

1

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

+0

我这样做,但不知道。 thnx ... – ogzylz 2010-08-21 22:25:31

1

换句话说线程2是否会导致更改thread1的当前目录?

执行外部进程时发生的情况完全取决于操作系统,而不是Java。

如果操作系统的“cd”命令的执行情况是某个进程可能会更改另一个进程的当前目录,那么会发生这种情况。如果不是,那么它不会。

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