[url]http://www.iteye.com/problems/100706
[/url]
这里Future<String>里的String就是返回类型。
可以改成任意其他类型如Future<List<Object>>
================================================
2014-07-21 更新:
这个程序有个问题,就是最后一个sublist可能会无法包含到最终的数据。
而上面的代码修复了这个问题。
[/url]
package com.lj.thread;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class BasicTest
{
public static void main(String[] args) throws InterruptedException, ExecutionException
{
List<String>list=new ArrayList<String>();
for(int i=0;i<100;i++){
list.add(i+",");
}
System.out.println(new BasicTest().list2Str(list, 5));
}
public String list2Str(List<String>list,final int nThreads) throws InterruptedException, ExecutionException{
if(list==null||list.isEmpty()){
return null;
}
StringBuffer ret=new StringBuffer();
int size=list.size();
ExecutorService executorService=Executors.newFixedThreadPool(nThreads);
List<Future<String>> futures=new ArrayList<Future<String>>();
for(int i=0;i<nThreads;i++){
final List<String> subList=list.subList(size/nThreads*i, size/nThreads*(i+1));
Callable<String>task=new Callable<String>(){
@Override
public String call() throws Exception
{
StringBuffer sb=new StringBuffer();
for(String str:subList){
sb.append(str);
}
return sb.toString();
}
};
futures.add(executorService.submit(task));
}
for(Future<String>future:futures){
System.out.println("Future<String>future:futures");
ret.append(future.get());
}
executorService.shutdown();
return ret.toString();
}
}
这里Future<String>里的String就是返回类型。
可以改成任意其他类型如Future<List<Object>>
================================================
2014-07-21 更新:
package com.lj.socket;
import java.util.ArrayList;
import java.util.List;
public class Test02
{
public static void main(String[] args)
{
List<String> all = new ArrayList<String>();
all.add("h");
all.add("w");
all.add("c");
all.add("2");
all.add("x");
int nthread = 2;
System.out.println(all.size());
int size = all.size();
for (int i = 0; i < nthread; i++)
{
System.out.println(i);
if (i + 1 == nthread)
{
System.out.println("hello");
List<String> lastSub=all.subList(size/nthread*i, all.size());
System.out.println("lastSub="+lastSub);
} else
{
List<String> sub = all.subList(size / nthread * i, size / nthread * (i + 1));
System.out.println("sub=" + sub);
}
}
}
}
这个程序有个问题,就是最后一个sublist可能会无法包含到最终的数据。
而上面的代码修复了这个问题。