如何通过命令行覆盖 Java 程序
How to overwrite Java Programm via Command Line
我写了一个默认设置为 5 个线程和 1 000 000 数组长度的并发 Mergesort 代码,我确保应用程序可以通过 ant start 从命令行启动。
现在我的问题是我还必须提供一个小的命令行处理来通过控制台的命令参数覆盖最大线程数和数组长度。
问题是我该怎么做,为此我需要编辑我的主代码或 build.xml 还是只需要一个命令,比如转到主代码,更改这个那个?
主要是这样的:
public class Main {
public static void main(String[] args) throws InterruptedException {
int nThreads=5;
int[] original = new int[1000000];
for (int i=0; i<original.length; i++) {
original[i] = (int) (Math.random()*9);
}
Mergesorts worker = new Mergesorts(original,nThreads);
System.out.println("ressource: 1 of 5 thread(s) used");
Thread w = new Thread(worker);
w.start();
w.join();
}}
那是我的 build.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<project default="start" name="Mergesort-compile and run">
<target name="compile">
<javac includeantruntime="false" srcdir="./src" destdir="Mergesort" />
</target>
<target name="start" depends="compile">
<java classname="Main">
<classpath path="Mergesort"/>
</java>
</target>
检查下面的代码:Java
public class Main {
public static void main(String[] args) throws InterruptedException {
int nThreads;
if (args.length <= 0) {
nThreads = 5; // default number of threads
} else {
nThreads = Integer.parseInt(args[0]); // first passed parameter value
}
int[] original = new int[1000000];
for (int i = 0; i < original.length; i++) {
original[i] = (int) (Math.random() * 9);
}
Mergesorts worker = new Mergesorts(original, nThreads);
System.out.println("ressource: 1 of 5 thread(s) used");
Thread w = new Thread(worker);
w.start();
w.join();
}
}
蚂蚁脚本:
<?xml version="1.0" encoding="UTF-8"?>
<project default="start" name="Mergesort-compile and run">
<target name="compile">
<javac includeantruntime="false" srcdir="./src" destdir="Mergesort" />
</target>
<target name="start" depends="compile">
<property name="nthread" value="5"/>
<java classname="Main">
<classpath path="Mergesort"/>
<arg value="${nthread}" />
</java>
</target>
运行 ant 脚本为:
ant start -Dnthread=10
这会将线程数设置为 10
我写了一个默认设置为 5 个线程和 1 000 000 数组长度的并发 Mergesort 代码,我确保应用程序可以通过 ant start 从命令行启动。
现在我的问题是我还必须提供一个小的命令行处理来通过控制台的命令参数覆盖最大线程数和数组长度。
问题是我该怎么做,为此我需要编辑我的主代码或 build.xml 还是只需要一个命令,比如转到主代码,更改这个那个?
主要是这样的:
public class Main {
public static void main(String[] args) throws InterruptedException {
int nThreads=5;
int[] original = new int[1000000];
for (int i=0; i<original.length; i++) {
original[i] = (int) (Math.random()*9);
}
Mergesorts worker = new Mergesorts(original,nThreads);
System.out.println("ressource: 1 of 5 thread(s) used");
Thread w = new Thread(worker);
w.start();
w.join();
}}
那是我的 build.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<project default="start" name="Mergesort-compile and run">
<target name="compile">
<javac includeantruntime="false" srcdir="./src" destdir="Mergesort" />
</target>
<target name="start" depends="compile">
<java classname="Main">
<classpath path="Mergesort"/>
</java>
</target>
检查下面的代码:Java
public class Main {
public static void main(String[] args) throws InterruptedException {
int nThreads;
if (args.length <= 0) {
nThreads = 5; // default number of threads
} else {
nThreads = Integer.parseInt(args[0]); // first passed parameter value
}
int[] original = new int[1000000];
for (int i = 0; i < original.length; i++) {
original[i] = (int) (Math.random() * 9);
}
Mergesorts worker = new Mergesorts(original, nThreads);
System.out.println("ressource: 1 of 5 thread(s) used");
Thread w = new Thread(worker);
w.start();
w.join();
}
}
蚂蚁脚本:
<?xml version="1.0" encoding="UTF-8"?>
<project default="start" name="Mergesort-compile and run">
<target name="compile">
<javac includeantruntime="false" srcdir="./src" destdir="Mergesort" />
</target>
<target name="start" depends="compile">
<property name="nthread" value="5"/>
<java classname="Main">
<classpath path="Mergesort"/>
<arg value="${nthread}" />
</java>
</target>
运行 ant 脚本为:
ant start -Dnthread=10
这会将线程数设置为 10