问题描述
- Socket多线程遍历一个数组
-
现在传来一个List里面装的IP,大概两千多条数据,我应该怎样实现多线程遍历?最好是简单的代码解释。谢谢大神了。
解决方案
你是要用什么语言呢?如果是java的话,可以先把List的数据存入队列中,由线程去获取后再处理。
实例代码,定义执行线程和总控制类如下:
import java.util.concurrent.ArrayBlockingQueue;
public class TaskExecutor implements Runnable{
private ArrayBlockingQueue<String> dataSource;
private String name;
public TaskExecutor(ArrayBlockingQueue<String> dataSource,String name){
this.dataSource = dataSource;
this.name = name;
}
@Override
public void run() {
if(dataSource==null){
return;
}
while(!dataSource.isEmpty()){
String ip = null;
synchronized(dataSource){
ip = dataSource.poll();
}
//TODO 处理队列中获取的数据
System.out.println("thread "+name+",process ip :"+ip);
}
}
}
测试代码:
public class Controller {
public static void main(String[] args) {
List<String> datas = new ArrayList<String>();
//存入N条待处理的IP信息
datas.add("10");
datas.add("21");
datas.add("22");
datas.add("23");
datas.add("24");
datas.add("25");
datas.add("26");
datas.add("27");
datas.add("28");
datas.add("29");
datas.add("20");
datas.add("32");
datas.add("42");
datas.add("52");
ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(datas.size(), false, datas);
//开启N个线程
int n = 2;
for(int i = 0;i<n;i++){
new Thread(new TaskExecutor(queue,"thread"+i)).start();
}
}
}
解决方案二:
一个简单的多线程socket
C++ Socket 多线程
解决方案三:
定义一个全局flag来表示是否找到,0为未找到
int flag =0;
然后开线程,所有线程可以用同一个处理函数
就是查找目标ip,若找到则把全局flag置1,如:
while(flag)
{
ret = search_ip();
if(找到)
{
flag =1;
break;
}
}
时间: 2024-08-02 09:28:00