首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java并发处理

Java并发处理
EN

Stack Overflow用户
提问于 2015-08-27 06:08:11
回答 1查看 122关注 0票数 2

对于并发处理,我编写了和executor类:

代码语言:javascript
复制
ExecutorService service = Executors.newFixedThreadPool(10);
                    Future<List<Content>> submit = service.submit(new PushClass(pushlist, content));
                    List<Content> resu = submit.get();

下面是实现可调用接口的push类:

代码语言:javascript
复制
 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会显示错误,因为“另一个线程正在处理”,我可以动态地缩放它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-27 06:13:33

  1. 是的,连接池将有助于更好地管理db资源,只需打开一次连接并将其返回池,而不是关闭池大小--我把它留给您(甚至一个可能就足够了)
  2. 为了提高性能,您可以做的最好的事情是http://docs.oracle.com/cd/E11882_01/java.112/e16548/oraperf.htm,即只有在大约500-1000条记录之后才将事务提交到db,以消除db开销。
  3. 您可以引入多个线程来接收传入的负载,在您的情况下,多线程应该是简单的,因为要执行的操作本质上是原子的(假设您只有插入),请为此探索java ExecutorServiceThreadPoolExecutor,您可以选择no。基于测试的线程,从10开始。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32241843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档