[英]Threads in Java and command line arguments
因此,我正在编写一个简单的线程来将两个向量相加,它需要2个命令行参数:向量长度和线程数。 据我了解,该程序应该接受这两个参数,并根据它们相加向量,从而根据线程数和向量长度显示性能。 这就是我卡住的地方。 到目前为止,我已经编写了基本的代码,该代码使用数组将两个向量相加并创建线程,显示了时间,但是我在使用命令行参数来实现它时遇到了麻烦。 到目前为止,这是我所做的。
public class Addition
{
public static void main(String args[])
{
int NoOfThreads = Integer.parseInt(args[0]);
VectorLength = Integer.parseInt(args[1]);
System.out.println("Start time: " + System.nanoTime());//print start time
Thread v1 = new Vector();
Thread v2 = new Vector();
Thread vsum = new Vector();
//start all threads
v1.start();
v2.start();
vsum.start();
//vsum2.start();
System.out.println("End time: " + System.nanoTime());//print end time
}
}
public class Vector extends Thread
{
//create vectors and assign them arbitrary values
int v1[] = {12,13,14,15,16,17,18};
int v2[] = {15,19,20,22,24,26,28};
//initialise the vector sums to zero
int vsum = 0;
public void run()
{
//loop to add up the elements of the first vector
if(Integer.parseInt(args[0])> 0 )
{
for(int i = 0; i < v1.length; i++)
{
for(int j=0; j<v2.length; j++)
{
vsum = v1[i]+ v2[j];
System.out.println("Current total of vector 1: " + vsum);
try
{
System.out.println(System.nanoTime());
Thread.sleep(100);
}
catch (InterruptedException e)
{}
}//for
}
}
}
}
您不能在main
类之外使用args
。
请不要使用Vector
因为它是ArrayList
的实现。
您可以做的是将成员变量int NoOfThreads
添加到thread
类中,并在构造thread class
时int NoOfThreads
进行设置,并在run()
使用它。
一些注意事项:
main(..)
,您没有正确等待线程终止。 启动线程后,将立即打印“结束时间:...”。 使用Thread.join()
。 vectorLength
,在使用范围内args
未知,等等) 我在这里看到两个编译问题。
首先,没有定义VectorLength
的类型。 我认为应该是int VectorLength
。
其次,您尝试访问似乎不可用的Vector
类中的args
引用。
如果要在Vector
类中使用args
,则可以将其作为参数传递给Vector
构造函数并将其存储为字段。 像这样:
public Vector(String[] args) {
this.args = args;
}
然后从您的Addition
类中,应该使用此重载的构造函数:
Thread v1 = new Vector(args);
Thread v2 = new Vector(args);
因为Vector不是Java中的保留关键字,所以将类创建为Vector将不会有问题,并且由于您没有使用<>-> <>的Vector类,因此不会有问题。
我唯一看到的问题是这段代码
int NoOfThreads = Integer.parseInt(args[0]);
VectorLength = Integer.parseInt(args[1]);
您正在尝试同时初始化两个变量NoOfThreads和VectorLength,但是已经用分号结束了两者之间的语句。
int NoOfThreads = Integer.parseInt(args[0])**,**
VectorLength = Integer.parseInt(args[1]);
注意用逗号代替分号。
其次,您尝试在Vector类的run方法中访问args [0],但args数组的范围在Addition的main方法中。
if(Integer.parseInt(args[0])> 0 )
尝试自己解决两个问题。 祝一切顺利。
您的代码中有太多坏处。 这里有几个。
我建议在执行此任务之前先进行一些谦虚的编程练习。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.