对于并发处理,我编写了执行器类:
ExecutorService service = Executors.newFixedThreadPool(10);
Future<List<Content>> submit = service.submit(new PushClass(pushlist, content));
List<Content> resu = submit.get();
下面是实现 Callable 接口(interface)的推送类:
public class PushClass implements Callable<List<Content>> {
List<Content> ls;
String content;
public PushClass(List<Content> ls, String content) {
this.ls = ls;
this.content = content;
}
private synchronized String push(String msisdn, String content, String Cli) {
// hitting the push url
} catch (Exception e) {
e.printStackTrace();
}
return status;
}
@Override
public List<Content> call() throws Exception {
for (Content c : ls) {
c.setResponse(push(c.getMsisdn(), content, c.getCli()));
}
return ls;
}
我可以将线程增加到什么限制,以防止服务器中出现任何排队,或者我可以使池动态化吗?有时 tomcat 显示错误,“其他线程正在处理中”,我可以动态缩放它吗?
最佳答案
- 是的,连接池将有助于更好地管理数据库资源,只需打开一次连接并将其返回到池中,而不是关闭,关于池大小我将其留给您(即使一个就足够了)
- 提高性能的最佳方法是 batchUpdate 即仅在大约 500-1000 条记录后才将事务提交到数据库,以消除数据库开销
- 您可以引入多个线程来接受传入的负载,多线程在您的情况下应该很简单,因为要完成的操作本质上是原子的(假设您只有插入),请探索 java ExecutorService为了这。 ThreadPoolExecutor ,您可以选择否。基于测试的线程数,从 10 开始。
关于Java并发处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32241843/