我想运行一个并行 Java 线程程序并利用多处理器执行。 但是我需要设置环境变量,以启用多线程环境。我知道您可以通过发出 setenv PARALLEL 4 或 setenv OMP_NUM_THREADS 4(对于 OpenMP 程序)来设置环境。
如果您有 4 个处理器,这应该可以让 4 个处理器同时运行。
我的问题是:
- where do you issue the above command (SETENV) and how do you do it?
在 java 中,您可以调用 System.getenv("NUM_THREADS")
来获取 NUM_THREADS
。但是,没有明确的方法来设置环境。我正在运行 AMD-x64 机器:操作系统:Windows 8,处理器:AMD E-300 APU 双核处理器,内存:4.00GB,系统类型:64 位操作系统。
最佳答案
下面是解释如何在 Windows 机器上手动设置环境变量的链接:
http://www3.ntu.edu.sg/home/ehchua/programming/howto/Environment_Variables.html
摘自上面链接的一段(必须完整阅读链接,知识非常丰富):
Display Variables and their Values
要列出所有变量及其值,请启动 CMD shell(单击“开始”按钮 ⇒ 运行 ⇒ 输入“cmd”)并发出命令“set”。要显示特定变量,请使用命令“set varname”。例如,
// Display all the variables (in NAME=VALUE pairs)
prompt> set
COMPUTERNAME=xxxxxxx
OS=xxxxxxx
PATH=xxxxxxx
.......
// Display a particular variable
prompt> set COMPUTERNAME
COMPUTERNAME=xxxxxx
// OR use echo command with variable enclosed within a pair of '%'s
prompt> echo %COMPUTERNAME%
COMPUTERNAME=xxxxxx
尝试在您的系统上发出 set 命令,并研究列出的环境变量。请特别注意名为 PATH 的变量。
Set/Change/Unset a Variable
要设置(或更改)变量,请使用命令“set varname=value”。 “=”符号前后不得有空格。要取消设置环境变量,请使用“set varname=”,即将其设置为空字符串。
prompt> set varname
prompt> set varname=value
prompt> set varname=
prompt> set
Display the value of the variable
设置或改变变量的值(注意:'='前后不能有空格) 通过设置为空字符串来删除变量(注意:'=' 之后没有任何内容) 显示所有环境变量。例如,
// Set an environment variable
prompt> set MY_VAR=hello
// Display
prompt> set MY_VAR
MY_VAR=hello
// Unset an environment variable
prompt> set MY_VAR=
// Display
prompt> set MY_VAR
Environment variable MY_VAR not defined
在CMD下通过“set”命令设置的变量是局部变量,仅对当前CMD session 可用。
如果你想使用Java代码设置相同的,下面是一个例子:
public static void main(String[] args) throws IOException {
ProcessBuilder pb = new ProcessBuilder("CMD", "/C", "SET");
Map<String, String> env = pb.environment();
env.put("MYVAR", "myValue");
Process p = pb.start();
InputStreamReader isr = new InputStreamReader(p.getInputStream());
char[] buf = new char[1024];
while (!isr.ready()) {
;
}
while (isr.read(buf) != -1) {
System.out.println(buf);
}
}
如果你想给你的程序传递一些值,你也可以在命令行中这样做:
java -DMyVar=varValue <main program>
这个值可以读作:
String myVar= System.getProperty("MyVar");
关于java - 如何为多线程程序设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18862612/