如何在完成时异步重新加入原始线程?

时间:2016-05-04 19:01:02

标签: java multithreading vaadin completable-future

虽然我不认为这是一个Vaadin特定问题。我真正需要做的就是重新加入未来在完成时创建的主题。

(ClickHandler) (event) -> {
    log().debug( "current Thread {}", Thread.currentThread().getId() );
    viewModel.generateFileDownload().thenAccept( this::download );
    // needs to continue to this immediately, note: there are similarly vaadin reasons why you can't just block here.
    button.setEnabled( false );
}


private void download( final File file ) {
   // do stuff that needs to happen in the original thread
  log().debug( "current Thread {}", Thread.currentThread().getId() );

   button.setEnabled( true );
}

我需要这些线程ID是相同的,显然我可以重做这个。我知道有一个加入,但现在确定当我不想重新加入直到完成时这对我有什么帮助?

1 个答案:

答案 0 :(得分:0)

对于您的具体问题,您应该只使用

Button button = new Button("Download");
button.setDisableOnClick(true); //after creating the button

button.setEnabled(true); //after using the button, in click handler

请注意,这是Button中的一项功能。对于更高级的案例,您应该使用Vaadin的@Push功能。