这段代码的目标是运行四个线程,它将打开四个文本文件,从中读取单词,然后将它们放入字符串数组,
我知道的主要问题:
1-我没有将并发函数放在void run函数中,我希望能够将参数传递到该函数中
2-我不确定是否正在修改字符串的全局数组
首先是主要方法:
public static void main(String[] args) throws IOException
{
//declare the threads
Thread thread1 = new Thread(ReadFile("list1.txt", Global.array1,"thread1"));
Thread thread2 = new Thread(ReadFile("list2.txt", Global.array2,"thread2"));
Thread thread3 = new Thread(ReadFile("list3.txt", Global.array3,"thread1"));
Thread thread4 = new Thread(ReadFile("list4.txt", Global.array4,"thread2"));
/*error message from netbeans: cannot find symbol
symbol: method ReadFile(java.lang.String,java.lang.String[])
it says it for every delcaration of the thread*/
thread1.start(); //putting the threads to work
thread2.start();
thread3.start();
thread4.start();
thread1.join(); //telling the threads to finish their work
thread2.join();
thread3.join();
thread4.join();
// merging the arrays into one
List list = new ArrayList(Arrays.asList(Global.array1));
list.addAll(Arrays.asList(Global.array2));
list.addAll(Arrays.asList(Global.array3));
list.addAll(Arrays.asList(Global.array4));
Object[] theArray = list.toArray();
-------------------------etc----------------------------
如果我的声音是对的,这就是“线程类”
public class ReadFile implements Runnable
{
public void run(){
//I should get stuff here, that's my problem!!!!
}
private String path;
Thread runner;
public ReadFile(String filePath, String[] toArray, String threadName) throws IOException
{
String path = filePath;
FileReader fr = new FileReader(path);
BufferedReader textReader = new BufferedReader(fr);
int numOfLines = readLines();
toArray = new String[numOfLines];
int i;
for (i=0; i<numOfLines; i++)
{
toArray[i]= textReader.readLine(); //place next line into string array
}
textReader.close();
}
int readLines() throws IOException
{
FileReader fr = new FileReader(filePath);
BufferedReader bf = new BufferedReader(fr);
String aLine;
int noOfLines = 0;
while((aLine = bf.readLine()) != null)
{
noOfLines++;
}
bf.close();
return noOfLines;
}
}
最后我为全局变量做了一个类,我不知道这是不是个好主意
public class Global
{
public static String[] array1;
public static String[] array2;
public static String[] array3;
public static String[] array4;
}
请让我知道你们的想法,任何帮助或解释或提示将不胜感激
3条答案
按热度按时间p8ekf7hl1#
您的构造函数签名
ReadFile
:与中的调用不匹配
main
(您只提供String
,String[]
). 我想你的意思是:你可能被这个事实搞糊涂了
ReadFile
的构造函数接受threadName
作为第三个参数,但是Thread
类本身也有一个类似的参数。jckbn6z72#
三个错误:
ReadFile
类是否实现了Runnable
,因此应该将示例传递给Thread
施工单位:thread thread1=新线程(新readfile(“list1.txt”,global.array1),“thread1”);
为什么要创建一个
Thread
内部ReadFile
? 删除,没有额外的跑步者需要!这个
ReadFile
构造函数有一个附加参数threadName
必须移除。kq4fsx7k3#
如果我们先修复你的文件读取线程,使主要工作发生在
run()
方法:然后我们可以在
main
方法如下: