首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待,直到使用Latch执行Platform.runLater

等待,直到使用Latch执行Platform.runLater
EN

Stack Overflow用户
提问于 2013-06-07 15:29:43
回答 1查看 5.5K关注 0票数 6

我试图实现的是暂停线程并等待,直到doSomeProcess()被调用,然后再继续。但由于某种奇怪的原因,整个过程被困在等待中,它永远不会进入Runnable.run。

代码片段:

代码语言:javascript
复制
final CountDownLatch latch = new CountDownLatch(1); 
Platform.runLater(new Runnable() {
   @Override public void run() { 
     System.out.println("Doing some process");
     doSomeProcess();
     latch.countDown();
   }
});
System.out.println("Await");
latch.await();      
System.out.println("Done");

控制台输出:

代码语言:javascript
复制
Await
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-09 06:02:49

latch.countDown()语句永远不会被调用,因为JavaFX线程正在等待它被调用;当JavaFX线程从latch.wait()中释放时,您的runnable.run()方法将被调用。

我希望这段代码能让事情变得更清晰。

代码语言:javascript
复制
    final CountDownLatch latch = new CountDownLatch(1);

    // asynchronous thread doing the process
    new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("Doing some process");
            doSomeProcess(); // I tested with a 5 seconds sleep
            latch.countDown();
        }
    }).start();

    // asynchronous thread waiting for the process to finish
    new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("Await");
            try {
                latch.await();
            } catch (InterruptedException ex) {
                Logger.getLogger(Motores.class.getName()).log(Level.SEVERE, null, ex);
            }
            // queuing the done notification into the javafx thread
            Platform.runLater(new Runnable() {
                @Override
                public void run() {
                    System.out.println("Done");
                }
            });
        }
    }).start();

控制台输出:

代码语言:javascript
复制
    Doing some process
    Await
    Done
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16978557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档