Platform.RunLater(),swingUtilities.InvokeLater()和Thread(runnable)混淆

时间:2014-09-21 04:55:33

标签: java swing concurrency javafx

请有人帮助我澄清这些概念来自c ++并尝试学习java一段时间,并且当我尝试尝试一些摇摆应用程序时,我刚刚达到这些条款(前两个)......

1 个答案:

答案 0 :(得分:5)

  • SwingUtilities.invokeLater(Runnable r)

    • 来自SwingUtilities API

        

      导致doRun.run()在AWT事件派发线程上异步执行。这将在处理完所有挂起的AWT事件后发生。当应用程序线程需要更新GUI时,应使用此方法。在以下示例中,invokeLater调用在事件派发线程上对Runnable对象doHelloWorld进行排队,然后打印一条消息。

    •   
    • 这会在Swing事件线程上对Runnable对象进行排队,以便Runnable包含的代码(可能是改变Swing GUI状态的代码或查询GUI状态的代码)在Swing事件线程上运行。进行此调用的代码不会等待Runnable运行,因此无法保证调用代码与Runnable代码的代码完成顺序。
    •   

  • new Thread(Runnable r)

    • 来自Thread API

        

      分配一个新的Thread对象。此构造函数与Thread(null,target,gname)具有相同的效果,其中gname是新生成的名称。自动生成的名称的格式为“Thread - ”+ n,其中n是整数。

    •   
    • 这是一个构造函数调用,它创建一个带有Runnable的Thread对象,当通过调用Thread对象上的start()启动时,在一个新线程中运行Runnable,该新线程是调用代码线程的背景。
    •   

  • Platform.runLater(Runnable r)

    • 来自Platform API

        

      将来某个未指定的时间在JavaFX应用程序线程上运行指定的Runnable。可以从任何线程调用的此方法将Runnable发布到事件队列,然后立即返回给调用者。 Runnables按照发布顺序执行。传递给runLater方法的runnable将在任何Runnable传递给后续的runLater调用之前执行。

    • 所以它表明这就像Swing的SwingUtilities.invokeLater(Runnable r),但它是JavaFX的味道。