用于 SQL 更新语句的 Java 单工作线程

2024-04-24

我正在开发一个基于 Java 的服务器,其中有多个线程(每个连接的用户一个线程+一些额外的线程)。会涉及到一些数据库连接,所以我在想服务器每次创建一个SELECT查询数据库时,它将为此启动一个新线程,以防止当前线程阻塞。我计划为此使用连接池,并且我想我知道该怎么做。 (我已经研究过C3P0 http://www.mchange.com/projects/c3p0/index.html)但是,会有很多UPDATE也涉及到语句,但是直接运行这些并不重要,这里有延迟也可以。而且由于可能有很多UPDATE声明,我正在考虑为所有人提供一个工作线程UPDATE声明。在我看来,这将具有能够重复使用的优点PreparedStatement-objects

问题:我怎样才能从其他线程中得知UPDATE-工作线程运行一些语句?我了解多线程以及如何使用同步块使线程相互“对话”,但是涉及到数据库,它突然感觉更加复杂。我读过准备好的语句和连接不应在线程之间共享。

我现在关于如何解决这个问题的想法:(感觉不是一个好的解决方案)

Use a LinkedBlockingQueue自定义类的(或另一种队列),其中包含有关要调用哪种 UPDATE 语句以及要发送哪些参数的信息。然后,工作线程在收到通知时将从该队列中读取数据(当将某些内容添加到队列中时),并且它将运行适当的方法,该方法将使用适当的准备好的语句,设置参数并调用它。

Edit:我认为自己采用这种方法的一个不好的想法是,参数可能是整数、字符串、双精度或其他。如何将它们存储在自定义类中?将它们全部存储为字符串感觉不太好。

我走在正确的轨道上还是有更好的方法来解决这个问题?


不需要显式的阻塞队列。您可以有一个工作线程和一个由一个封装的工作队列ExecutorService http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html。至于值,您可以使用泛型:

class ThreadTask<T> implements Runnable {
    private T value;

    public ThreadTask(T value) {
        this.value = value;
    }

    public void run() {
        // update based on value
    }
}

...

ExecutorService exec = Executors.newSingleThreadExecutor();
exec.submit(new ThreadTask<String>("asdf"));
exec.submit(new ThreadTask<Integer>(1));

单线程执行器只是一个等待队列并按顺序执行提交任务的工作线程。无需其他显式管理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于 SQL 更新语句的 Java 单工作线程 的相关文章

  • Import 语句顺序有什么影响吗?

    这个疑问由来已久 当我使用 eclipse 编写类时 导入语句会自动填充 import语句的顺序有影响吗 1 关于编程执行速度 2 任何标准编码实践都是相同的 import语句对执行速度没有影响at all 它们仅在编译时重要 如果您完全限
  • JAVA GENERICS错误:具有相同的擦除,但两者都没有覆盖另一个[重复]

    这个问题在这里已经有答案了 为了好玩 我正在创建一个排序框架 以更好地理解各种排序算法 而且 我试图使其足够通用 以便它可以对实现扩展可比较接口的接口的任何内容进行排序 然而 java 编译器对我不满意 这是我的界面 public inte
  • 如何为流数据创建 Flux/Publisher

    我正在使用轮询方法定期获取数据 新数据可能随时到达 我想向我的客户公开一个反应式接口 因此 我想创建一个发布者 Flux 它会在新数据可用时发布新数据并通知订阅者 我怎么做 我看到的所有 Flux 示例都是针对数据已知 可用的情况 实际上
  • Hibernate/JPA 在启动时不验证数据库架构

    由于某种原因 hibernate 无法捕获诸如将实体映射到不存在的表之类的问题 我的 persistence xml 文件看起来像这样
  • 为什么在步骤中将 TransactionManager 设置为 JPATransactionManager 不正确?

    我正在使用 Spring Batch 和 JPA 并且经历了 TransactionManager bean 冲突 我通过在步骤中将 TransactionManager 设置为 JpaTransactionManager 找到了解决方案
  • 我怎样才能修复这段代码中的这个错误[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我运行 jUnit 测试时 我在 testSetName 上遇到错误 这是为什么 因为测试是为了查看名称是否为 ferndown 以及它
  • 验证在子类上调用此方法时是否调用了重写的超类方法

    我将用这个例子来展示我的问题 我有一个带有方法的类foo 该类有一个重写此方法的子类 子类的方法调用超类的方法 我可以验证一下吗 我不想测试什么foo在超类中确实如此 我只需要验证它是否被调用 我知道重构可以有所帮助 优先考虑组合而不是继承
  • 从 Android Intent 打开图库应用

    我正在寻找一种打开方式Android来自意图的画廊应用程序 我不想返回图片 而是只是打开图库以允许用户使用它 就像他们从启动器中选择它一样 View pictures folders 我尝试执行以下操作 Intent intent new
  • 无法加载(查找)j2v8_android_x86 库

    我有一个使用的 gradle 项目j2v8 android 2 2 1 http mvnrepository com artifact com eclipsesource j2v8 j2v8 android 2 2 1库 为 V8 JS 引
  • 来自公共字符串的 Android RSA 加密

    我正在开发一个 Android 应用程序 我希望用户能够使用其他人的公钥加密消息 系统将生成公钥 私钥对 然后可以将消息秘密发送给其他用户 我正在创建一个加密类 它将处理消息的加密 解密 不幸的是我遇到了一些问题 在这种方法中 我想传递用户
  • 如何一次又一次地使用同一个迭代器?

    给出下一个代码 这是某个大型方法的一部分 ArrayList
  • 使用 Android 将文本文件上传到 Google Drive

    编辑 我已将文本设置为字符串 如下所示 字符串文本 你好 我想将其转换为纯文本文件 然后上传到 Google 云端硬盘文件夹 我已经尝试过下面的代码 但它不完整 所以我无法说出出现了什么错误 我正在使用 Google Drive 快速启动
  • 构造函数中的同步块

    我有一个带有静态变量的类 如下所示 private static Object sMyStaticVar 如果我想在构造函数中为这个 var 赋值 我有这样的代码 if sMyStaticVar null sMyStaticVar new
  • 如何解除阻塞在 ServerSocket.accept() 上的线程?

    我有一个带有以下代码的服务器线程 public void run try ServerSocket server EneaLog printLog Server is running server new ServerSocket this
  • RequestDispatcher.forward 到媒体文件?

    我最近有一个需要解决的问题 https stackoverflow com questions 19385223 how to transparently stream a file to the browser并找到了一个解决方案 但如果
  • 如何在 SnakeYaml 中解析 YAML 文件的一部分

    我是 YAML 新手 并且解析了一个 YAML 配置文件 如下所示 applications authentication service version 2 0 service url https myapp corp auth app
  • Android 回调监听器 - 将 SDK 中的 pojo 的值发送到应用程序的 Activity

    我有一个深埋在 SDK 中的 java 类 它执行一个操作并返回一个布尔值 它不知道应用程序的主要活动 但我需要主要活动来接收该布尔值 我见过很多关于回调 广播和监听器的问题 但他们似乎都了解该活动 我的 pojo 确实有一个 Activi
  • 使用 Wildfly 在 Jersey 上使用 @PersistenceUnit 注入 EntityManagerFactory

    我尝试使用 PersistenceUnit 注入 EntityManagerFactory 但它始终为空 我认为我的 persistence xml 没问题 因为我可以使用以下代码获取 EntityManager EntityManager
  • 在 NodeJS 中处理长时间运行的进程?

    我看过一些较旧的帖子涉及这个主题 但我想知道当前的现代方法是什么 用例是 1 假设您想要在视频文件上执行长时间运行的任务 例如 60 秒长 例如jspm install这最多可能需要 60 秒 2 不能对任务进行细分 其他要求包括 需要知道
  • Java无限信号量

    想知道如何not使用信号量限制连接 或任何东西 所以你可能会想 这听起来很愚蠢 但是 它稍微简化了我的代码 因为它让我可以统一处理有限和无限的情况 请注意 我并不是在寻找有关如何编写类似内容的建议 if limited semaphore

随机推荐

  • 是否可以在 python 中并行化 selenium webdriver get_attribute 调用?

    我正在运行这段代码 from multiprocessing Pool import ThreadPool from selenium import webdriver driver webdriver Firefox driver get
  • 使用 train_test_split 分割数据时的精度与随后加载 csv 文件的精度不同

    我建立了一个模型来预测客户是企业客户还是私人客户 训练模型后 我预测了 1000 个数据集的类别 但我没有将其用于训练 此预测将保存在 csv 文件中 现在我有两种不同的行为 在程序中分割样本数据 当我创建示例时train sample t
  • 传递 lambda 而不是接口

    我创建了一个界面 interface ProgressListener fun transferred bytesUploaded Long 但只能将其用作匿名类 而不能用作 lambda dataManager createAndSubm
  • CALayer框架origin.y翻转,0在底部?

    当我在 CALayer 上添加一组 fram 时 origin y 会反转 0 位于其超级层的底部 增加 origin y 将其在其超级层中向上移动 我做了什么事情导致了这个翻转吗 我希望 origin y 0 是顶部 而不是底部 Than
  • 0x80005000 UserPrincipal.GetGroups 上的未知错误,OU 中包含特殊字符

    我正在尝试使用 UserPrincipal 的 GetGroups 方法 如果用户帐户位于包含正斜杠的 OU 中 则对 GetGroups 的调用将失败并出现 COM 未知错误 0x80005000 刚刚找到用户帐户 我可以访问其他属性 如
  • Node.js 和 Express 应用程序中的 res.render() 和 ejs.render() 有什么区别

    I use EJS https github com visionmedia ejs我的 Node js 和 Express 应用程序中使用了模板引擎 并且到目前为止已经使用了它的功能和渲染 并且到目前为止还没有出现任何问题 然而 虽然我总
  • 改进 cvFindChessboardCorners

    不幸的是 我无法找到我的问题的任何解决方案 我想做的是使用 OpenCV 方法改进结果cvFindChessboardCorners为了能够实现更好的相机校准 因为我认为这就是为什么我在不扭曲 校正图像时得到较差结果的原因 就像我之前的问题
  • Google 我的商家 API 发现网址不起作用

    我有一段 Python 代码 直到几周前 2021 年 10 月 仍在与 Google My Business API 配合使用 discovery url https developers google com my business s
  • 从网站获取数据的vba代码

    我是这个网站和 VBA 编程的新手 我遇到了一个问题 我必须从中获取数据这一页 http www kieskeurig nl zoeken index html q 4960999543345 我需要有超链接网址Check Rates 10
  • 将三个列表合并到一个字典中

    我需要将三个列表合并到一本字典中 这些列表来自读取我格式化的 txt 文件 以下是该文件的片段 maker Horsey Ford Overland Scripps Booth year 1899 1909 1911 1913 model
  • 使用 .htaccess 在 HTTP 和 HTTPS 之间正确切换

    我们有一个购物网站 托管在共享主机 Mediatemple Gridserver 上 网站的某些部分需要使用 HTTPS 结帐等 但其余部分应使用 HTTP 有谁知道我们如何始终强制对特定 URL 正确使用 HTTP HTTPS 我们已经让
  • SQL 查询返回与同一表的另一列中的精确值匹配的单个值

    Table Dummy Colum1 Colum2 219 217 219 218 228 218 228 225 229 218 229 220 我需要结果集 其中如果用户在 where 子句中提供的数字应该与其计数示例完全匹配 如果用户
  • 使用主干渲染引导模式

    我认为代码可以更好地解释我的问题 风景 App Views ErrorModal Backbone View extend template window template errorModal render function this e
  • Knockout.js、映射插件和 moment.js - 格式化/映射 json 日期

    我将 Knockout js 与映射插件一起使用 我正在获取一些 json 数据并使用映射插件将其映射到我的 html 中 json 数据中是 json 格式的日期 我需要使用映射插件将其映射到 html 中 是否可以使用 moment j
  • iOS - 异步图像下载

    我正在编写一个应用程序 它将在 UIImageView 中显示在我的服务器上找到的图像 我需要一些能够异步下载图像并缓存它的东西 同时将其放入 UIImageView 中 当我按下按钮时 下载也需要能够取消 谁能指出我可以做到这一点的方向吗
  • 为什么 JVM 同时具有“invokespecial”和“invokestatic”操作码?

    两条指令都使用静态而不是动态调度 似乎唯一的实质性区别是invokespecial始终将一个对象作为其第一个参数 该对象是分派方法所属类的实例 然而 invokespecial实际上并没有把物体放在那里 编译器负责通过在发出之前发出适当的堆
  • 视图“~/Views/Login/Login.aspx”必须派生自 ViewPage、ViewPage、ViewUserControl 或 ViewUserControl

    因此 我在 ASP NET mvc2 解决方案上遇到此错误 该解决方案曾经工作正常 我必须安装 Visual Studio 2012 但磁盘空间不足 因此必须手动卸载一些 Visual Studio 2010 功能 但目前看来并非完全必要
  • 嵌套的可分割对象不读取

    我正在尝试打包一个包含一些 string int 变量和一个对象变量的对象 字符串和整数可以工作 但嵌套对象不行 我知道我也必须将其打包 但我显然做错了 在我的嵌套类中 writeToParcel方法被调用 我检查Log d 调用 但是cr
  • Javascript:如何实现异步函数队列(无需库)

    我一直在搜索谷歌和SO 但由于某种原因我很难解决这个问题 只是强调一下 我不想加载像 JQuery 这样的库 因为我不需要它的大部分内容 当我could使用动画库 我已经构建了我自己需要的几个函数 其中一些甚至不是您在库中找到的标准动画 所
  • 用于 SQL 更新语句的 Java 单工作线程

    我正在开发一个基于 Java 的服务器 其中有多个线程 每个连接的用户一个线程 一些额外的线程 会涉及到一些数据库连接 所以我在想服务器每次创建一个SELECT查询数据库时 它将为此启动一个新线程 以防止当前线程阻塞 我计划为此使用连接池