3

我来自 VB6,我是 Java 新手。在 VB6 中,DoEvents放弃处理器并允许它处理其他线程。Java中有类似的东西吗?我该如何使用它?

4

2 回答 2

1

放弃处理器并允许它处理其他线程。

Thread#yield()是自动放弃对处理器的控制的 java 对应项。

来自java.lang.Thread#yield()的 javadoc :

向调度程序提示当前线程愿意放弃其当前对处理器的使用。调度程序可以随意忽略此提示。Yield 是一种启发式尝试,旨在改善线程之间的相对进展,否则会过度使用 CPU。它的使用应与详细的分析和基准测试相结合,以确保它实际上具有预期的效果。

很少使用这种方法。它对于调试或测试目的可能很有用,它可能有助于重现由于竞争条件导致的错误。在设计并发控制结构(例如 java.util.concurrent.locks 包中的结构)时,它也可能很有用。

注意:对于基于 Java 的桌面 UI 框架,如SwingRIM 的 UI 应用程序,有一些方法可以使用invokeLater()语义类型来修改 UI。

于 2012-09-27T17:32:11.387 回答
1

我自己从 VB6 迁移到 Java 并且当时正在寻找同样问题的答案,我可以告诉你,我必须改变思考如何做事的方式。对“doEvents”的需求很可能是因为您尝试以与编写 VB6 相同的方式编写 Java 程序,或者尝试将 VB6 项目“逐行”移植到 Java。两者都不是一个好主意。好好看看摇摆教程(如果这是关于 UI 的)和线程教程,不管它是否是 UI。密切关注并尝试了解 Event Dispatch 线程的工作原理。我发现 Java 教程是一个很好的起点,它们现在位于 Oracle:http ://docs.oracle.com/javase/tutorial/ 查看示例并阅读代码,它们是学习的好地方/实验

您需要开始用 Java 思考,而不是将 VB6 翻译成 Java,我花了一段时间才到达那里,但时间不长,如果您了解它的方法,克服对“doEvents”的需求将使您在这条路上走得很远. 祝你好运,欢迎来到 Stackoverflow,这是寻求帮助的好地方!

于 2012-09-27T17:47:28.593 回答