2016-12-18 20 views
2

我有一個Settable Future對象「temp」,其中設置了一個上下文。也調用temp.addListener(new Runnable{...})方法,基本上向它註冊一個監聽器。但是,如果出現任何異常,則調用temp.setException()。如果setException被調用,那麼監聽器將被取消註冊或將清除上下文(在設置異常之後基本上可設置的Future對象會被損壞)?一旦SetException方法被調用,Settable Future對象會發生什麼?

的碼流是這樣的: -

  1. temp.setContext({temp.set(//some value is set if everything goes right) || temp.setException(//set exception if something comes up)});

  2. temp.addListener(new Runnable{ run(){temp.get()}})

回答

4

當你調用setException(),該ListenableFuturewill run its listener。如果要編寫的代碼將在此情況下運行而不是,則可以使用Futures.addCallback而不是addListener。 (addCallback可讓您指定僅在成功或僅在發生故障時運行的代碼。)

至於上下文會發生什麼情況:上下文不是ListenableFuture API的一部分。我不知道它是否由您或其他圖書館添加。你必須諮詢那個類來了解它的行爲。

相關問題