浏览 1301 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (12)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-23
最后修改:2009-01-23
1. 重构场景1: 导入大数据量的文本文件(记录数>10000).
2. 示例代码 MessageReceiver类负责创建每个批次的具体执行线程。
class MessageReceiver implements Callable<Boolean> { /** The messages. */ private List<Document> messages; /** The processed file. */ private String file; /** The parms. */ private Properties parms; /** * Instantiates a new message receiver. * * @param messages the messages * @param file the processed file * @param parms the parms */ public MessageReceiver (List<Document> messages, String file, Properties parms) { this.messages = messages; this.file = file; this.parms = parms; } /** * Call. * * @return the boolean * * @throws Exception the exception */ public Boolean call() throws Exception { try { return addMessage(); } catch (Exception e) { throw e; } } /** * Adds the message. * * @return true, if successful */ private boolean addMessage () { messages.add(TransformDocument(file, parms)); return true; } }
receiveCSV 方法负责分解各个批次以及最后将各线程处理结果汇总计算。(省略关键业务逻辑, 只保留逻辑主干)
private List<Document> receiveCSV() { // omit the subsidiary process try { br = new BufferedReader(new FileReader(file)); String text = ""; while ((text = br.readLine()) != null) { fileContents.append(text + "\n"); recordsNum++; if ((recordsNum % csvManageRecordNum) == 0) { String processedFile = getFileContent(fileContents); Future<Boolean> result = threads.submit(new MessageReceiver(messages, file, parms)); results.add(result); fileContents = new StringBuilder(); } } } catch (FileNotFoundException e) { // } catch (IOException e) { // } finally { // omit the dispose process } if ((recordsNum % csvManageRecordNum) != 0) { String file = getFileContent(fileContents); Future<Boolean> result = threads.submit(new MessageReceiver(messages, file, parms)); results.add(result); } // Using thread pool to execute simultaneously try { for (Future<Boolean> result : results) { try { result.get(); } catch (ExecutionException ee) { throw new Exception(ee); } } } catch (InterruptedException ie) { throw new Exception(ie); } finally { threads.shutdown(); } return messages; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |