Java 基于PostgreSQL的多线程数据处理
我正在尝试使用新处理器中的8个线程来处理PostgreSQL数据库上的事务。它必须在PostGIS中处理地理数据,我已经用一个处理器核心(一个线程)完成了这项工作。我正在使用Java(JDBC4)为每个线程创建一个连接。每个连接接收处理几何实体组的作业,其中每个实体使用一个SELECT语句和一个UPDATE语句。每个实体都由唯一ID处理,并且不使用任何关系函数,因此事务之间没有依赖关系 可以启动应用程序以使用可变数量的线程运行。当我运行它时,除了一个线程外,所有线程都挂起。即使我尝试只使用两个线程运行,也会有一个线程挂起。使用pgAdmin3中的“服务器状态”工具,我可以看到所有挂起的线程都是“事务中空闲的”,一些处于“ExclusiveLock”模式,一些处于“RowExclusiveLock”模式,一些处于“AccessShareLock”模式 我已经调整了postgresql.conf,如中所述 我试图在UPDATE语句之后让线程休眠一段时间,但没有成功 为什么要创建锁?一旦查询没有理由依赖其他锁,有没有办法避免这些锁Java 基于PostgreSQL的多线程数据处理,java,multithreading,postgresql,Java,Multithreading,Postgresql,我正在尝试使用新处理器中的8个线程来处理PostgreSQL数据库上的事务。它必须在PostGIS中处理地理数据,我已经用一个处理器核心(一个线程)完成了这项工作。我正在使用Java(JDBC4)为每个线程创建一个连接。每个连接接收处理几何实体组的作业,其中每个实体使用一个SELECT语句和一个UPDATE语句。每个实体都由唯一ID处理,并且不使用任何关系函数,因此事务之间没有依赖关系 可以启动应用程序以使用可变数量的线程运行。当我运行它时,除了一个线程外,所有线程都挂起。即使我尝试只使用两个线
感谢您的帮助您是否为JDBC连接设置了最小池大小和最大池大小
在您的情况下,最小值应该是8。最小池大小和最大池大小是否与web开发相关?事实并非如此。这是一个java应用程序。我找不到具有类似方法的java类。我还尝试了org.apache.commons.dbcp.BasicDataSource,但没有成功。线程挂起。我将尝试将进程拆分为8个java应用程序实例,并将组引用作为命令行参数提供,并使用shell脚本控制作业。我将发布结果。当我在几个独立的Java应用程序中使用shell脚本控制的循环来划分处理时,它会起作用。。。因此,我得出结论,当连接集由单个Java应用程序构造时,它们不能正常工作;当连接集由独立的Java应用程序构造时,它们可以正常工作。我想知道为什么,这样我就可以只用java来完成这项工作了!