gpt4 book ai didi

Java多线程和迭代器,应该很简单,初学者

转载 作者:行者123 更新时间:2023-11-30 04:34:46 25 4
gpt4 key购买 nike

首先我想说我正在从 python 升级到更复杂的代码。我现在开始接触 Java,而且我还是个新手。我知道 Java 非常擅长多线程,这很好,因为我正在使用它来处理 TB 级的数据。

数据输入只是输入到迭代器中,我有一个类封装了一个运行函数,该函数从迭代器中获取一行,进行一些分析,然后将分析写入文件。线程必须彼此共享的唯一信息是它们正在写入的对象的名称。简单吧?我只是希望每个线程同时执行 run 函数,这样我们就可以快速迭代输入数据。在 python 中这会很简单。

from multiprocessing import Pool
f = open('someoutput.csv','w');
def run(x):
f.write(analyze(x))

p = Pool(8);
p.map(run,iterator_of_input_data);

因此,在 Java 中,我有 10K 行分析代码,并且可以非常轻松地迭代我的输入,并将其传递给我的 run 函数,该函数又调用我的所有分析代码,将其发送到输出对象。

public class cool {
...
public static void run(Input input,output) {
Analysis an = new Analysis(input,output);
}
public static void main(String args[]) throws Exception {
Iterator iterator = new Parser(File(input_file)).iterator();
File output = File(output_object);
while(iterator.hasNext(){
cool.run(iterator.next(),output);
}
}
}

我想要做的就是让多个线程获取迭代器对象并执行 run 语句。一切都是独立的。我一直在研究java多线程的东西,但它用于通过网络进行通信、共享数据等。这是否像我想象的那么简单?如果有人能给我指出正确的方向,我会很乐意做这项工作。

谢谢

最佳答案

ExecutorService (ThreadPoolExecutor) 将是 Java 的等效项。

ExecutorService executorService =
new ThreadPoolExecutor(
maxThreads, // core thread pool size
maxThreads, // maximum thread pool size
1, // time to wait before resizing pool
TimeUnit.MINUTES,
new ArrayBlockingQueue<Runnable>(maxThreads, true),
new ThreadPoolExecutor.CallerRunsPolicy());

ConcurrentLinkedQueue<ResultObject> resultQueue;

while (iterator.hasNext()) {
executorService.execute(new MyJob(iterator.next(), resultQueue))
}

将您的工作实现为 Runnable。

class MyJob implements Runnable {
/* collect useful parameters in the constructor */
public MyJob(...) {
/* omitted */
}

public void run() {
/* job here, submit result to resultQueue */
}
}

resultQueue 用于收集作业结果。

请参阅java api documentation获取详细信息。

关于Java多线程和迭代器,应该很简单,初学者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13758673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com