1/* 2 * Copyright (C) 2016 Google Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 * use this file except in compliance with the License. You may obtain a copy of 6 * the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations under 14 * the License. 15 */ 16 17package com.googlecode.android_scripting.future; 18 19import java.util.concurrent.CountDownLatch; 20import java.util.concurrent.Future; 21import java.util.concurrent.TimeUnit; 22 23/** 24 * FutureResult represents an eventual execution result for asynchronous operations. 25 * 26 */ 27public class FutureResult<T> implements Future<T> { 28 29 private final CountDownLatch mLatch = new CountDownLatch(1); 30 private volatile T mResult = null; 31 32 public void set(T result) { 33 mResult = result; 34 mLatch.countDown(); 35 } 36 37 @Override 38 public boolean cancel(boolean mayInterruptIfRunning) { 39 return false; 40 } 41 42 @Override 43 public T get() throws InterruptedException { 44 mLatch.await(); 45 return mResult; 46 } 47 48 @Override 49 public T get(long timeout, TimeUnit unit) throws InterruptedException { 50 mLatch.await(timeout, unit); 51 return mResult; 52 } 53 54 @Override 55 public boolean isCancelled() { 56 return false; 57 } 58 59 @Override 60 public boolean isDone() { 61 return mResult != null; 62 } 63 64} 65