java - 如何为多线程程序设置环境变量?

标签 java multithreading environment-variables

我想运行一个并行 Java 线程程序并利用多处理器执行。 但是我需要设置环境变量,以启用多线程环境。我知道您可以通过发出 setenv PARALLEL 4 或 setenv OMP_NUM_THREADS 4(对于 OpenMP 程序)来设置环境。

如果您有 4 个处理器,这应该可以让 4 个处理器同时运行。

我的问题是:

  1. 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/

相关文章:

java - 如何使应用程序无法关闭?

java - 使用反射消隐字段

java - MQTT-JAVA客户端程序

C++ - 套接字服务器线程

python concurrent.futures 线程与进程问题

java - 在 Java 注释处理器中获取环境变量

visual-studio-2015 - 如何在 Visual Studio 测试中使用 ASP.NET Core 环境变量

Java midi 音量控制不起作用

java - 生产者/消费者模式与观察者模式的区别

docker - Dockerfile:有什么方法可以从.env文件读取变量