java - 我可以在这个程序中实现线程以使其更快吗?

标签 java multithreading swing concurrency

程序:平方数测试仪

它的作用:测试您输入的数字以内的平方数

这是应用程序的逻辑/流程图

  1. 打开/运行文件
  2. 显示一个 JOptionPane,询问您要输入的最大数字
  3. 输入后,显示一个 JFrame,其中包含您提出的所有问题
  4. 完成后,打开一个对话框询问您是否要重试并显示每个问题所用时间的图表。

如果有人想看看我到目前为止所拥有的内容,请参阅来源:https://github.com/Injustice/SquareNumberTester

最佳答案

根据您对过程的描述,这似乎不是。

在考虑并行计算时,您需要考虑代码的哪些部分可以同时执行以及这些操作是否具有较长的计算时间。您的过程似乎大多是连续的,即您响应用户输入,但无法充分利用他的思考时间。

考虑两种情况:

  • 假设准备问题所需的计算时间很长。用户输入后您需要准备许多问题。
    • 顺序:您可以让用户等待所有问题都准备好,然后在回答时闲置。
    • 并行:您在用户回答的同时准备问题。当在后台添加问题时,“用户线程”将向“问题准备”线程询问下一个问题。 “问题准备”线程就像问题的缓冲区。
  • 假设准备问题所需的计算时间始终短于用户回答所需的时间。在这种情况下,没有区别,因为用户没有等待时间 - 您可以在他思考时准备下一个(一个)问题,并重复执行此操作,而不需要问题缓冲区。

有关 Java 和并行执行的更多信息,请参阅 tutorial on concurrency .

有关与“代码的并行或顺序程度”相关的加速信息,请参阅 Amdahl's law .

关于java - 我可以在这个程序中实现线程以使其更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22844843/

相关文章:

java - 使用 createAndShowGUI() 方法时如何将图标设置为 JFrame?

java - 用Java或C将1010存储在矩阵中

java - 有没有为不同供应商定制不同 View 的框架?

java - 我怎样才能把 'group'自定义类放在一起呢?

java - 为什么我在Java中不能第二次向线程池中添加任务?

c# - Asp.net -- C# 中的多线程

Java graphics2D fillRect 不能正确处理半透明颜色

java - 什么是 java 的 ManualResetEvent 等价物?

java - 双击时,jtable 数据将替换为之前的结果

java - 在 Swing 应用程序中嵌入 JFXPanel 在添加/删除时失败