首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止调用()返回值

如何防止调用()返回值
EN

Stack Overflow用户
提问于 2018-09-01 16:54:40
回答 1查看 124关注 0票数 1

是否有一种方法可以防止调用()返回值,直到设置了布尔值?这样我就可以控制futureCall.get()何时完成了?

主要课程:

代码语言:javascript
复制
ExecutorService executor = Executors.newCachedThreadPool();
Future<List<Float>> futureCall = executor.submit((Callable<List<Float>>) new AxisMeasuring(2,100,this));
List<Float> jumpValues;
try {
    jumpValues = futureCall.get();
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
}

可调用类:

代码语言:javascript
复制
public class AxisMeasuring implements SensorEventListener, Callable<List<Float>>{

    AxisMeasuring(int _axis, final int _timeDelay, Context _context) {
        axis = _axis;
        final Context context = _context;
        timeDelay = _timeDelay;

        handler = new Handler();
        runnable = new Runnable() {
            @Override
            public void run() {
                values.add(value);

                if (!hadZeroValue && value <= 1) {
                    hadZeroValue = true;
                }
                if (hadZeroValue && value >= 12) {
                    Log.d("Debug","Point reached");
                } else {
                    handler.postDelayed(runnable, timeDelay);
                }
            }
        };
        handler.post(runnable);
    }

    @Override
    public List<Float> call() throws Exception {

        return values;
    }
}

futureCall.get()立即返回null。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-01 17:00:54

是的,使用CountDownLatch1计数。

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

并将这个锁存器传递给AxisMeasuring

代码语言:javascript
复制
public class AxisMeasuring implements SensorEventListener, Callable<List<Float>>{

    private CountDownLatch latch;

    AxisMeasuring(int _axis, final int _timeDelay, Context _context, CountDownLatch latch) {
        latch = latch;
        ...
    }

    @Override
    public List<Float> call() throws Exception {
        latch.await();  // this will get blocked until you call latch.countDown after,  for example, a Boolean is set
        return values;
    }
}

在其他线程中,您可以调用latch.countDown()作为信号。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52130333

复制
相关文章

相似问题

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