gpt4 book ai didi

java - 使用线程逐 block 处理文件

转载 作者:行者123 更新时间:2023-11-30 07:20:53 25 4
gpt4 key购买 nike

我有一个包含 5000 个 IP 地址的数组列表。对于每个 IP 地址,我想执行一个 SNMPGet 请求和一个 FTPDownload 命令。我想以一种方式实现它,其中一次有 2 个不同的线程同时运行前五个 IP 地址。执行完这些 IP 地址后,接下来的 2 个 IP 地址将在这些线程上执行。谁能帮忙看看怎么做?

这里的connection是一个扩展线程的类,要实现的工作写在它的run()方法中。请帮忙。

Connection newConnection =new Connection(0);
Connection newConnection1 =new Connection(1);

for(int i = 0; i < NE_list.getRowCount(); i=i+2)
{
if(NE_list.getValueAt(i, 0).toString().equals("true")) //Some condition here for the IP Address
{

newConnection.i=i;
newConnection1.i=i+1;
newConnection.runprogram();
newConnection1.runprogram();
}


}

class Connection extends Thread{
int i;
Connection(int val){
i=val;
}
void runprogram(){
start();
}
public void run(){
//SNMP and FTP Code here for IP Address in index i of NE_list
}
}

最佳答案

Executor Framework 最适合您的解决方案。我在这里创建了一个示例。您可以根据需要增加线程数。

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class SomeRunnable implements Runnable {
int threadNo = -1 ;
List<String> list = new ArrayList<String>();
public SomeRunnable(List list, int threadNo ) {
this.list.addAll(list);
this.threadNo =threadNo;
}
@Override
public void run() {
for (String element : list) {
System.out.println("By Thread:" + threadNo+", Processed Element:" +element);
}
}

}

public class ExecutorDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
for (int i = 0; i < 100; i++) {
list.add("Elem:"+i);
}
// Divide list
int divideIndex = list.size()/2;
//Create objects of Runnable
SomeRunnable obj1 = new SomeRunnable(list.subList(0, divideIndex),1);
SomeRunnable obj2 = new SomeRunnable(list.subList(divideIndex,list.size()),2);

//Create fixed Thread pool, here pool of 2 thread will created
ExecutorService pool = Executors.newFixedThreadPool(2);

pool.execute(obj1);
pool.execute(obj2);

pool.shutdown();
}

}

关于java - 使用线程逐 block 处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13689245/

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