Java并发处理

标签 java concurrency

对于并发处理,我编写了执行器类:

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 显示错误,“其他线程正在处理中”,我可以动态缩放它吗?

最佳答案

  1. 是的,连接池将有助于更好地管理数据库资源,只需打开一次连接并将其返回到池中,而不是关闭,关于池大小我将其留给您(即使一个就足够了)
  2. 提高性能的最佳方法是 batchUpdate 即仅在大约 500-1000 条记录后才将事务提交到数据库,以消除数据库开销
  3. 您可以引入多个线程来接受传入的负载,多线程在您的情况下应该很简单,因为要完成的操作本质上是原子的(假设您只有插入),请探索 java ExecutorService为了这。 ThreadPoolExecutor ,您可以选择否。基于测试的线程数,从 10 开始。

关于Java并发处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32241843/

相关文章:

java - 应用程序开发教程

java - 使用 JSoup 聚合数据

Java邮件不返回主题

sql-server - 存储过程是否锁定表/行?

sql-server - 如何在共享数据库上同时生成唯一的用户名?

c++ - 两个进程之间如何通信

java - web.xml 中的 Servlet 3.0 兼容 Web 应用程序声明有何作用?

java - 将 MouseListener 添加到 JCheckBox

java - volatile变量可以在java中定义为静态吗?

java - ConcurrentSkipListMap 有什么好处?