这个问题来自我对这个问题的实际缺乏经验。我不会撒谎,这是一个新手而且必不可少的问题,我一直不愿意问。在将此作为主观推动之前,我恳请阅读整篇文章。
我已经阅读了threads
,特别是在Java
,但是我从未真正使用它们。我知道必须使用它们来最大限度地提高应用程序的效率,但是我从来都不知道何时或者在某种程度上如何。
所以我决定创建一个Math Quiz应用程序,包括GUI,高分系统等。 - 在主菜单中,我有我的菜单栏,其中有一个复选框菜单项切换用户是否希望使用该应用程序特定主题与否。
显然,我希望在它的生命周期内连续检查此选项。把所有这些因素放在一起让我想知道我是否应该在框架类中创建一个线程来连续检查而不会影响它之外的任何东西。
所以这是我的问题。这是选择使用线程的理想方案吗?如果是,使用它们可能会出现什么问题?
如果不是,我可以问为什么不能以及我可以在我想要的应用程序中使用它们。
我还想指出是的,我已经阅读了大量关于线程的文章和小书。然而,在主题中自学成才是我正确学习的唯一方法。希望你明白。
答案 0 :(得分:1)
根据您用于创建GUI的ui框架,已经存在某种线程,它处理所有用户操作,呈现控件等。因此,通常的方法来执行您想要的操作是在按钮上实现回调操作,当用户点击它时将调用该操作,而不是在线程中定期检查按钮状态。
使用线程的一个更好的例子可能是,例如,并行计算。例如,想象一下,您希望计数10个(或者可能是1000个)大文件中的单词总数。一种方法是逐个打开这些文件,读取和计数。或者,您可以实现一个通用作业,该作业知道如何计算单个文件中的单词。然后,创建一个线程池(您不希望10000个线程同时进行,一个固定大小的池将是一个更好的主意),以及一个需要处理的文件队列。池中的每个线程从队列中选取下一个项目,计算给定文件中的单词,将数字放在输出队列上,然后继续到下一个输入项,除非队列为空。
然后主线程将所有文件名放在输入队列上,并轮询输出队列中的数字,并将它们汇总在一起。所有线程完成,输出队列为空,您将获得最终计数。
这比逐个读取文件更快,特别是如果你的程序有多个CPU核心可用(但即使你不这样做,因为你的阅读可以并行发生)。
有意义吗?