-1
我有一个包含10000行的CSV文件。我想用N个线程读取文件,确保只读一次特定行。例如。如果线程0读取行号1,则其他线程不应再次读取该特定行,并且其他线程将处理剩余的行。任务是每行只能处理一次。只使用多线程读取一行
我们可以实施这种方法吗?示例代码将非常感激。 谢谢!
public class FileReaderThread implements Runnable {
@Override
public void run() {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("C://Users/mR.cOol/Desktop/Input.csv"));
String line = "";
try {
while ((line = br.readLine()) != null) {
synchronized (line) {
System.out.println("In Synchronized block" + " " + Thread.currentThread().getName());
String arr[] = line.split(",");
System.out.println(arr[0]);
}
}
} catch (IOException e) {
}
} catch (Exception e) {
}
}
}
public class MainClass {
private static final int workerThread = 2;
public static void main(String[] args) {
Thread thread[] = new Thread[workerThread];
for(int i=0;i<workerThread;i++) {
thread[i] = new Thread(new FileReaderThread());
thread[i].start();
}
}
}
我们可以在同样的结果。但是我们通常拒绝这样做 - 就像你试图自己解决这个问题所做的努力一样。你知道,我们不为你做功课。 – GhostCat
@GhostCat请找到示例代码。 –
A)永远不要使用空的catch块B)你所要求的只是没有多大意义:读者只提供读取方法。所以你的想法是让多个线程与同一个阅读器一起工作并不会增加任何价值,相反 - 它使事情变得比需要的复杂得多。相反:首先将所有行读入列表中,然后让每个线程处理该列表的不同部分。为了记录:你下降了约10%的解决方案,它仍然看起来像你希望我们为你做的想法。 – GhostCat