public void dorun(){
//构造一个线程池
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 10, 3,
TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(10),
new ThreadPoolExecutor.CallerRunsPolicy());
for (int i = 1; i <= sheet.getLastRowNum(); i++)
{
threadPool.execute(new FileHandlerThread(this,sheet.getRow(i)));
}
threadPool.shutdown();
try {
boolean loop = true;
do { //等待所有任务完成
loop = !threadPool.awaitTermination(2, TimeUnit.SECONDS);
} while(loop);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void addResult(String returnvalue){
...//主线程和子线程通信用的
}
class FileHandlerThread implements Runnable,Serializable{
private HSSFRow row;
private FileHandler fileHandler;
public FileHandlerThread(FileHandler fileHandler,HSSFRow row){
this.row = row;
this.fileHandler = fileHandler;
}
public void run() {
fileHandler.addResult(returnvalue);
}
}