1bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2009 The Guava Authors 3bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 4bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * Licensed under the Apache License, Version 2.0 (the "License"); 5bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * you may not use this file except in compliance with the License. 6bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * You may obtain a copy of the License at 7bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 8bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * http://www.apache.org/licenses/LICENSE-2.0 9bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 10bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * Unless required by applicable law or agreed to in writing, software 11bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * distributed under the License is distributed on an "AS IS" BASIS, 12bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * See the License for the specific language governing permissions and 14bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * limitations under the License. 15bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor */ 16bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 17bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnorpackage com.google.common.util.concurrent; 18bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport javax.annotation.Nullable; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 21bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor/** 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * A {@link ListenableFuture} whose result may be set by a {@link #set(Object)} 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * or {@link #setException(Throwable)} call. It may also be cancelled. 24bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 25bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * @author Sven Mawson 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @since 9.0 (in 1.0 as {@code ValueFuture}) 27bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor */ 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic final class SettableFuture<V> extends AbstractFuture<V> { 29bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 30bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor /** 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Creates a new {@code SettableFuture} in the default state. 32bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor */ 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static <V> SettableFuture<V> create() { 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new SettableFuture<V>(); 35bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 36bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 37bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor /** 38bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * Explicit private constructor, use the {@link #create} factory method to 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * create instances of {@code SettableFuture}. 40bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor */ 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private SettableFuture() {} 42bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 43bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor /** 44bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * Sets the value of this future. This method will return {@code true} if 45bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * the value was successfully set, or {@code false} if the future has already 46bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * been set or cancelled. 47bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @param value the value the future should hold. 49bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * @return true if the value was successfully set. 50bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor */ 51bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor @Override 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public boolean set(@Nullable V value) { 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.set(value); 54bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 55bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 56bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor /** 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Sets the future to having failed with the given exception. This exception 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * will be wrapped in an {@code ExecutionException} and thrown from the {@code 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * get} methods. This method will return {@code true} if the exception was 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * successfully set, or {@code false} if the future has already been set or 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * cancelled. 62bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @param throwable the exception the future should hold. 64bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * @return true if the exception was successfully set. 65bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor */ 66bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor @Override 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public boolean setException(Throwable throwable) { 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.setException(throwable); 69bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 70bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor} 71