Mad*_*dan -4 java multithreading
我有一个计费守护程序,必须以非常快的方式处理数十万个数据.我实现ExecutorSerivce了并行处理.它确实提高了速度,但不是很多.处理1,00,000条记录大约需要2.5到3个小时.如何在半小时内处理这些数据更快?
我已经为执行设置编写了以下内容:
-Xms2048M -Xmx2048M -XX:MaxPermSize=256m
Run Code Online (Sandbox Code Playgroud)
我试图用1个生产者和4个消费者实现Producer Consumer模型.每个列表可以包含10,000条记录.
ArrayBlockingQueue<BillableList> list =new ArrayBlockingQueue<BillableList>(10);
ExecutorService threadPool = Executors.newFixedThreadPool(5);
threadPool.execute(new Consumer("pool1", list));
threadPool.execute(new Consumer("pool2", list));
threadPool.execute(new Consumer("pool3", list));
threadPool.execute(new Consumer("pool4", list));
Future producerStatus = threadPool.submit(new Producer("Producer", list));
producerStatus.get();
threadPool.shutdown();
Run Code Online (Sandbox Code Playgroud)
在将记录更新到数据库时,我也收到了很多"超出数据库锁等待超时"的异常.这是因为不同的消费者同时尝试同一个用户吗?如何让不同的消费者从ArrayBlockingQueue列表中获取不同的数据?
Pup*_*ppy 10
唯一可能的答案是"使用分析器并找出它为什么慢".当您不知道问题出在何处时,您无法对问题采取任何措施.你打算怎么做,选择一个随机函数并进行微优化?Profiler数据或永远不会发生任何事情.
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |