所有线程都在等待一些障碍条件

时间:2018-05-01 04:27:07

标签: java multithreading datasource threadpool connection-pooling

我有这样的课。

class EmployeeTask implements Runnable {   
    public void run(){ 
        PayDAO  payDAO = new payDAO(session);
        String newSalary= payDAO.getSalary(empid);
        String newTitle= payDAO.getTitle(empid);

        EmployeeDAO employeeDAO = new EmployeeDAO(session);
        List<Employee> employees = employeeDAO.getEmployees();
          employees.parallelStream().foreach(employee-> employeeDAO.add(newSalary, newTitle,employee));
    }
}
  1. 当我为一个线程运行上面的代码时,它在1秒内完成数据库操作并返回。
  2. 当我使用parallelStream()运行它时,它将提交8个请求,所有8个线程将等待8秒然后返回。这意味着服务器正在顺序执行请求而不是并行执行请求。
  3. 我检查了java jetty日志

    Theread-1 Insert ...

    Theread-2 Insert ...

    ...

    Theread-8 Insert ...

    八秒后,每次请求即1秒

    Theread-1 Insert ...&lt; = update 1

    Theread-2 Insert ...&lt; = update 1

    ...

    Theread-8 Insert ...&lt; = update 1

    同样的事情还在继续。

    1. 这清楚地说明,所有线程都被阻塞在一个资源上,来自我的客户端java的数据源只有一个连接,因此所有八个线程都被阻塞,或者服务器一个接一个地执行请求。 / LI>

      我查看了MaxPooledConnections - 提供了20个MaxPooledConnections PerNode - 提供5个默认值。

      我认为Vertica数据库服务器很好,也许客户端没有DatasourceConnection池,如何启用Java端DatasourceConnection池。任何代码示例?

      目前我正在使用mybatis ORM,以及以下数据源

      <environments default=“XX”>
          <environment id=“XX”>
              <transactionManager type=“JDBC”/>
              <dataSource type="POOLED">
                  <property name="driver" value="com.vertica.jdbc.Driver"/>
                  <property name="url" value="jdbc:vertica://host:port/schema”/>
                  <property name="username" value=“userName”/>
                  <property name="password" value=“password”/>
                 <property name="poolMaximumActiveConnections" value=“50”/>
                  <property name="poolMaximumIdleConnections" value=“10”/>
              </dataSource>
          </environment>
      </environments>
      

      所有线程都在等待的屏障条件是什么,我的猜测是数据源连接。任何帮助表示赞赏

      感谢。

0 个答案:

没有答案