gpt4 book ai didi

java - 如何维护线程列表?

转载 作者:行者123 更新时间:2023-12-02 05:19:01 27 4
gpt4 key购买 nike

我有数百个文件需要处理。我一次处理一个文件,需要 30 分钟。

我想我可以在 10 个并发线程、一次 10 个文件中完成此处理,并且我可能可以在 3 分钟而不是 30 分钟内完成。

我的问题是,管理 10 个线程的“正确”方法是什么?当一个完成后,创建一个新的,最大数量为 10。

这就是我到目前为止所拥有的......这是“正确”的方法吗?

public class ThreadTest1 {

public static int idCounter = 0;

public class MyThread extends Thread {

private int id;

public MyThread() {
this.id = idCounter++;
}

public void run() {
// this run method represents the long-running file processing
System.out.println("I'm thread '"+this.id+"' and I'm going to sleep for 5 seconds!");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("I'm thread '"+this.id+"' and I'm done sleeping!");
}

}

public void go() {

int MAX_NUM_THREADS = 10;

List<MyThread> threads = new ArrayList<MyThread>();

// this for loop represents the 200 files that need to be processed
for (int i=0; i<200; i++) {

// if we've reached the max num of threads ...
while (threads.size() == MAX_NUM_THREADS) {
// loop through the threads until we find a dead one and remove it
for (MyThread t : threads) {
if (!t.isAlive()) {
threads.remove(t);
break;
}
}

}

// add new thread
MyThread t = new MyThread();
threads.add(t);
t.start();

}

}

public static void main(String[] args) {
new ThreadTest1().go();
}

}

最佳答案

您可以使用ExecutorService管理您的线程。

并且您可以在线程run方法中添加while循环来重复执行文件处理任务。您还可以阅读 BlockingQueue用法。我认为它非常适合在线程之间分配新文件(任务)。

关于java - 如何维护线程列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26655769/

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