我有理解线程的问题。有人可以帮助我知道我如何能够完成这个程序的其余部分。以下是程序文本:
程序将读取一个文件,每行一个字。单词应存储在表(数组)中,然后k个线程查找表中给定单词出现的次数。如果您的程序被称为Finde.java应该是示例。以这种方式开始:
java Finde father myfile.txt 8
您将在文件myfile.txt中找到使用8个线程的单词father的次数。因此,k = 8
请记住考虑到k可能是1.当读入文件时,主 - 线程共享表约k个等长的部分,并启动k个线程来查看每个部分。当一个线程发现其部分中出现的字数时,应将其报告给一个公共对象(监视器)。主 - 线程应该等到所有线程都完成搜索,检索监视器的总发生次数,最后写出这个数字。
以下是我现在提出的代码:
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
CommonObject co = new CommonObject();
Finde f = new Finde();
Scanner file = null;
String[] read = new String[267752];
try{
file = new Scanner(new File("myfile.txt"));
}
catch(IOException e){
e.printStackTrace();
}
while(file.hasNext()){
for ( int i = 0; i < read.length; i++){
read[i] = file.next();
Runnable r = new Thread(read[i]);
Thread t = new Thread(r);
t.start();
}
}
}
}
public class CommonObject {
private final int K = 8;
private String word;
private int count = 0;
synchronized void findeWord(String word) {
this.word = word;
}
synchronized void countWord(int count) {
count = count;
}
}
public class Finde implements Runnable {
static volatile int i;
public void run() {
while(true) {
}
}
}
答案 0 :(得分:0)
读取主线程中的文件,然后同时读取这些行:
使用Java 8:
final List<String> allLines = Files.readAllLines(file);
Future<Integer> fr = new ForkJoinPool(k).submit(() ->
return allLines.parallelStream()
.flatMap(s -> s.split(" "))
.filter(s -> s.equals(word))
.count();
);
int res = fr.get();