Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于PostgreSQL的多线程数据处理_Java_Multithreading_Postgresql - Fatal编程技术网

Java 基于PostgreSQL的多线程数据处理

Java 基于PostgreSQL的多线程数据处理,java,multithreading,postgresql,Java,Multithreading,Postgresql,我正在尝试使用新处理器中的8个线程来处理PostgreSQL数据库上的事务。它必须在PostGIS中处理地理数据,我已经用一个处理器核心(一个线程)完成了这项工作。我正在使用Java(JDBC4)为每个线程创建一个连接。每个连接接收处理几何实体组的作业,其中每个实体使用一个SELECT语句和一个UPDATE语句。每个实体都由唯一ID处理,并且不使用任何关系函数,因此事务之间没有依赖关系 可以启动应用程序以使用可变数量的线程运行。当我运行它时,除了一个线程外,所有线程都挂起。即使我尝试只使用两个线

我正在尝试使用新处理器中的8个线程来处理PostgreSQL数据库上的事务。它必须在PostGIS中处理地理数据,我已经用一个处理器核心(一个线程)完成了这项工作。我正在使用Java(JDBC4)为每个线程创建一个连接。每个连接接收处理几何实体组的作业,其中每个实体使用一个SELECT语句和一个UPDATE语句。每个实体都由唯一ID处理,并且不使用任何关系函数,因此事务之间没有依赖关系

可以启动应用程序以使用可变数量的线程运行。当我运行它时,除了一个线程外,所有线程都挂起。即使我尝试只使用两个线程运行,也会有一个线程挂起。使用pgAdmin3中的“服务器状态”工具,我可以看到所有挂起的线程都是“事务中空闲的”,一些处于“ExclusiveLock”模式,一些处于“RowExclusiveLock”模式,一些处于“AccessShareLock”模式

我已经调整了postgresql.conf,如中所述

我试图在UPDATE语句之后让线程休眠一段时间,但没有成功

为什么要创建锁?一旦查询没有理由依赖其他锁,有没有办法避免这些锁


感谢您的帮助

您是否为JDBC连接设置了最小池大小和最大池大小


在您的情况下,最小值应该是8。

最小池大小和最大池大小是否与web开发相关?事实并非如此。这是一个java应用程序。我找不到具有类似方法的java类。我还尝试了org.apache.commons.dbcp.BasicDataSource,但没有成功。线程挂起。我将尝试将进程拆分为8个java应用程序实例,并将组引用作为命令行参数提供,并使用shell脚本控制作业。我将发布结果。当我在几个独立的Java应用程序中使用shell脚本控制的循环来划分处理时,它会起作用。。。因此,我得出结论,当连接集由单个Java应用程序构造时,它们不能正常工作;当连接集由独立的Java应用程序构造时,它们可以正常工作。我想知道为什么,这样我就可以只用java来完成这项工作了!