【问题标题】:Could I implement threads in this program to make it faster?我可以在这个程序中实现线程以使其更快吗?
【发布时间】:2014-04-03 17:29:12
【问题描述】:

程序:平方数测试仪

它的作用:在平方数上测试你,直到你输入的数字

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

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

如果有人想看看我目前拥有的东西,请来源:https://github.com/Injustice/SquareNumberTester

【问题讨论】:

  • 您认为多线程如何加速您的应用程序?
  • 输入上限是多少?
  • 我不知道,这就是我问的原因。理论上,限制是 Integer.MAX_VALUE。实际上,在值为 46,390(最大值的 sqrt)之后会引发异常。但是没有实际的最大界限(因为没有异常检查值是否太高或太低,我现在要实现它)。
  • 更新:我已经实现了我在上面评论中提到的内容。

标签: java multithreading swing concurrency


【解决方案1】:

您对程序的描述似乎不是。

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

考虑两种情况:

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

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

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

【讨论】:

  • 那么我可以在处理输入后在线程中生成问题并在用户思考的同时添加它们吗?微不足道的收获值得吗?如果我不这样做,如果我仍然同步方法,是否会影响性能?
  • 第一个问题:是的。第二个问题:可能不是(我假设从用户的角度来看这个过程是即时的)。第三个问题:编写顺序代码,就好像它是并行的一样,理论上不会表现得更差。我不确定在执行与并发相关的代码时 JVM 是否有一些小的开销。从程序员的角度(主观)来看,并行代码通常更难管理(读取、维护等)。查看我对答案的修改。
  • 好的,非常感谢。如果你检查过我的代码(或者如果你没有检查过),你会推荐什么项目来让我发展我的并发性、异常处理和其他技能(如 UI 等)?
  • 我会阅读有关这些主题的教程,并遵循练习或至少是示例。我不知道你说的是什么项目,你不是问你链接的项目吗?无论如何,异常处理都是强制性的,你可以为它创建一个 UI,甚至是做一些小事情的并发操作。
  • 我理解他们,我只是想在这之后做点什么。
猜你喜欢
  • 1970-01-01
  • 2013-09-04
  • 2011-02-20
  • 2020-11-05
  • 2021-05-08
  • 2018-06-25
  • 2017-11-06
  • 2014-08-13
  • 2016-07-12
相关资源
最近更新 更多