我来自VB6,我是Java的新手。在VB6中,DoEvents
放弃处理器并允许它处理其他线程。 Java中有类似的东西吗?我该如何使用它?
答案 0 :(得分:1)
放弃处理器并允许它处理其他线程。
Thread#yield()是自愿放弃对处理器控制的java对应物。
来自java.lang.Thread#yield()的javadoc:
向调度程序提示当前线程是否愿意产生其当前对处理器的使用。调度程序可以忽略此提示。 Yield是一种启发式尝试,用于改善线程之间的相对进展,否则会过度利用CPU。它的使用应与详细的分析和基准测试相结合,以确保它实际上具有预期的效果。
使用此方法很少合适。它可能对调试或测试目的很有用,它可能有助于重现因竞争条件而产生的错误。在设计并发控制结构(例如java.util.concurrent.locks包中的结构)时,它也可能很有用。
注意强>:
对于基于Java的桌面UI框架(如Swing,RIM's UI application),有一些方法可以使用invokeLater()
类型的语义来修改UI。
答案 1 :(得分:1)
我自己从VB6迁移到Java并且当时正在寻找这个问题的答案,我可以告诉你,我必须改变我对如何做事的思考方式。对“doEvents”的需求很可能是由于您尝试以与编写VB6相同的方式编写Java程序或尝试将“VB6”项目“逐行”移植到Java。这两个都不是好主意。仔细看看swing教程(如果这是关于UI)和线程教程是否是UI。密切关注并尝试了解Event Dispatch线程的工作原理。我发现Java教程是一个很好的起点,它们现在位于Oracle:http://docs.oracle.com/javase/tutorial/查看示例并阅读代码,它们是学习/实验的好地方
你需要开始用Java思考而不是将VB6翻译成Java,我花了一段时间才能到达那里但不会太长时间并且克服对“doEvents”的需求会让你走很长的路,如果你理解了绕过它。祝你好运,欢迎来到Stackoverflow,这是一个寻求帮助的好地方!