在多线程中用Java快速执行MySQL存储过程的方法?

在多线程中用Java快速执行MySQL存储过程的方法?,java,mysql,stored-procedures,Java,Mysql,Stored Procedures,在Java中,在线程化环境中发布存储过程的最快选项是什么?根据Connection.prepareCall()是一种昂贵的方法。那么,当不能同步访问单个CallableStatement时,在每个线程中调用它的替代方法是什么呢?大多数JDBC驱动程序在每个连接中只使用一个套接字。我认为MySQL也使用单个套接字。在多个线程之间共享一个连接是一个糟糕的性能想法 如果在不同线程之间使用多个连接,则需要为每个连接使用CallableStation。每个连接都需要一个CallabalStatement池

在Java中,在线程化环境中发布存储过程的最快选项是什么?根据Connection.prepareCall()是一种昂贵的方法。那么,当不能同步访问单个CallableStatement时,在每个线程中调用它的替代方法是什么呢?

大多数JDBC驱动程序在每个连接中只使用一个套接字。我认为MySQL也使用单个套接字。在多个线程之间共享一个连接是一个糟糕的性能想法

如果在不同线程之间使用多个连接,则需要为每个连接使用CallableStation。每个连接都需要一个CallabalStatement池。在这种情况下,最简单的合并方法是包装连接类并将所有调用委托给原始类。这可以通过Eclipse快速创建。在包装的方法prepareCall()中,可以添加一个简单的池。您还需要CallableStatement的包装类。close方法将CallableStatement返回到池中


但首先你应该检查一下这个电话是否真的很贵,因为很多司机已经在车内进行了这样的投票。创建一个prepareCall()和close()循环并计算时间。

连接不是线程安全的,因此不能跨线程共享它


当您准备调用时,JDBC驱动程序(可能)会告诉RDBMS系统执行大量存储在服务器端的工作。在这里,您可能犯了过早优化的错误

仔细考虑一下,如果您在基础架构代码方面有问题,那么您的问题就在其他地方。大多数应用程序不会花费过多的时间来完成这些工作。
确保您使用的是数据源,大多数都进行连接缓存,有些甚至进行语句缓存。
此外,如果这是一个性能瓶颈,则意味着您要一个接一个地执行许多查询,或者您的连接池太小。也许您应该对代码进行一些基准测试,以查看存储过程与JDBC代码所花的时间。
当然,我会遵循MySQL关于使用CallableStatement的建议,我相信他们已经对此进行了基准测试。大多数应用程序不会在线程之间共享任何内容,这很少是一个问题