当前位置: 首页 > 面试题库 >

什么是事件调度线程?

邴俊民
2023-03-14
问题内容

我知道“线程”的含义,并且如果我将事件分发线程(EDT)理解为“只是一个线程”,它可以解释很多,但是显然,它并不能解释所有内容。

我不了解此线程有什么特别之处。例如,我不明白为什么要在EDT中启动GUI?为什么“主”线程是GUI的床?好吧,如果我们只是不想占用主线程,为什么为什么不能仅在“另一个线程”中启动GUI,为什么它应该是一些称为“
EDT”的“特殊”线程呢?

那我不明白为什么我们不能像其他线程一样启动EDT?为什么我们应该使用一些特殊工具(称为invokeLater)。以及为什么GUI不像其他任何线程那样不能立即启动。我们应该等到准备好接受我们的工作。是因为EDT可以同时执行多个任务吗?

如果您决定回答这个问题,请问您是否可以使用一个非常简单的术语,因为恐怕否则,我将无法理解答案。

html" target="_blank">添加:

我一直以为每个线程有一个“任务”。因此,在每个线程中,我们执行预定义的命令序列。但是在我看来,在事件调度线程中,我们可以执行服务器任务。好吧,它们不能同时执行(线程在不同任务之间切换,但一个线程中仍然有多个任务)。这样对吗?例如,EDT中有一个线程显示主窗口,此外,我们还向EDT发送了另一个任务,该任务应该更新窗口组件之一,并且只要准备好,EDT就会执行此新任务。EDT是否以此方式与其他线程不同?


问题答案:

事件调度线程是处理所有GUI事件并管理Swing GUI的线程。如果您的程序中有任何GUI,它将在Swing代码中的某处启动。之所以在幕后完成,是因为简单-
您不必费心自己启动和管理额外的线程。

关于必须使用invokeLater()它来更新GUI的事实是由于并发问题。只能从一个线程修改GUI,因为Swing不是线程安全的(值得注意的是,
大多数
工具包都不是线程安全的,有一篇不错的文章提供了一些想法)。这就是为什么您必须提交所有GUI更新才能在EDT上运行的原因。

您可以在Swing中阅读有关并发性的更多信息,以及在Sun关于Swing中并发性的教程中了解事件分配线程。另外,如果您希望了解如何以其他方式完成此操作,则可以查看SWT工具箱。在SWT中,您必须自己管理EDT。



 类似资料:
  • 问题内容: 我最近开始学习和探索Java中GUI编程的基础知识。 经过一段时间的编程,我只完成了后端工作或其他工作,因此,我最接近用户界面的是命令控制台(令人尴尬的是,我知道)。 我正在使用Swing,据我所知,通过扩展,我也正在使用AWT。 我的问题基于以下代码: 我已经研究了一段时间,因为我想完全理解这段奇怪的代码,并且多次遇到“事件分派线程”一词。如果我错了,请纠正我,但据我了解;它与使用多

  • Java Swing教程使用SwingUtilities。invokeLater创建GUI(如这里所示)。这里解释了为什么要这样做——大多数Swing对象都不是线程安全的。另一方面,我所看到的大多数JRubySwing示例只是设置了脚本中可见的顶部框架(如这里所示——归档中的“gui”目录)。 问题是,在 JRuby 脚本中创建应用程序顶部帧时,我是否应该遵循使用 SwingUtilities.i

  • 使用指南 - 数据报告 - 访问分析 - 什么是事件 事件是网页内部某个可以点击的交互元素的点击。 如下载、移动广告点击、小工具、Flash 元素、AJAX 嵌入式元素以及视频播放等。 利用百度统计的“事件分析”报告(点此了解事件分析报告如何使用),可以对事件的点击情况进行跟踪。如何安装高级事件跟踪代码请参考链接:https://www.wenjiangs.com/doc/nqW2asFX。 如果

  • 当一个组织中有N名员工时,我们会得到N个日期偏移范围。类似于 1-4(即员工将在第一、第二、第三和第四天来) 2-6 8-9 ... 1-14 我们必须在最少的天数上组织一次活动,以便每个员工至少可以参加两次活动。请建议算法(可能是贪婪的)来做到这一点。 PS:事件是一天的事件。

  • 问题内容: 我了解了swing是不是线程安全的。深入研究,我发现必须对事件分发线程进行任何对swing组件的修改,以防止与多线程相关的各种问题。但是,这些信息似乎完全到此为止。似乎没有一个很好的教程可以解释如何在Internet上可以访问的任何地方进行此操作。 从与其他问题有关的已发布代码中收集信息,似乎我将不得不在程序中的每个单独的swing修改周围放置一个不整洁的代码块(例如本例中的代码):

  • 问题内容: 我正在尝试了解Redis的基础知识。Redis是无处不在的一种,它是使事情变得原子化的单线程,但是我无法想象这在内部是如何工作的。 如果它是IO绑定的应用程序(例如Node.js),则我们不设计服务器单线程,该线程在启动IO操作后释放了另一个请求的空间,并在IO操作完成后将数据返回给客户端(提供并发性)。但是在Redis的情况下所有数据都可以在主内存中使用,我们根本就不会做IO操作。那