Java 如何异步设置值并在稍后阶段获取

Java 如何异步设置值并在稍后阶段获取,java,java.util.concurrent,completable-future,Java,Java.util.concurrent,Completable Future,我希望异步设置变量的值。接下来,我希望在稍后阶段获得该值。我该怎么做?这就是我目前为实现这一目标所做的。这是一个正确的实现,还是我应该去追求一个完美的未来 当进行rest调用时,这是第一个被调用的方法之一 public class A{ @Autowired private Helper helper; private final ExecutorService executor = Executors.newFixedThreadPool(10); pub

我希望异步设置变量的值。接下来,我希望在稍后阶段获得该值。我该怎么做?这就是我目前为实现这一目标所做的。这是一个正确的实现,还是我应该去追求一个完美的未来

当进行rest调用时,这是第一个被调用的方法之一

public class A{

    @Autowired
    private Helper helper;

    private final ExecutorService executor = Executors.newFixedThreadPool(10);

    public void stepOne(Model model) {

        MyObj myObj = model.myObj;
        // helper.decrypt() returns a String
        Future<String> futureNumber = executor.submit(() -> helper.decrypt());
        myObj.setFutureNumber(futureNumber);
    }
}

// coming to following method after awhile going to various other classes / methods 
// now I need the value myObj.getFutureNumber(). 

public class B{
    public void stepTwo(Model model) {

        // model should now have the value 100
        MyObj myObj = model.myObj;
        final String number = null;

        try{
            myObj.setNumber(myObj.getFutureNumber().get());
        }catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

        if(myObj.getNumber() == 100){
            // do something
        }
    }
} 
公共A类{
@自动连线
私人佣工;
private final executor Service executor=Executors.newFixedThreadPool(10);
公共空间第一步(模型){
MyObj MyObj=model.MyObj;
//decrypt()返回一个字符串
Future futureNumber=executor.submit(()->helper.decrypt());
myObj.setFutureNumber(futureNumber);
}
}
//过了一段时间,我们来到了下面的方法,我们来到了各种其他的类/方法
//现在我需要值myObj.getFutureNumber()。
公共B级{
公共空间第二步(模型){
//模型现在应该具有值100
MyObj MyObj=model.MyObj;
最终字符串编号=null;
试一试{
myObj.setNumber(myObj.getFutureNumber().get());
}捕捉(中断异常e){
e、 printStackTrace();
}捕获(执行例外){
e、 printStackTrace();
}
if(myObj.getNumber()==100){
//做点什么
}
}
} 
我是MyObj

public class MyObj{
    private String number;
    private Future<String> futureNumber;
    // get set methods
}
公共类MyObj{
私有字符串编号;
私人未来号码;
//获取集方法
}

IMO,使用
CompletableFuture
您可以更轻松地异步设置数字。以下是一种可能的方法:

public CompletableFuture<Model> setNumberAsync() {
    return CompletableFuture.supplyAsync(() -> helper.decrypt())
            .thenCombine(stepsBeforeSettingNumber(), (number, model) -> {
                MyObj myObj = model.myObj;
                myObj.setNumber(number);
                if (myObj.getNumber() == 100) {
                    // do something
                }
                return model;
            });
}

public CompletableFuture<Model> stepsBeforeSettingNumber() {
    //  going to various other classes / methods 

public CompletableFuture setNumberAsync(){
返回CompletableFuture.SupplySync(()->helper.decrypt())
.thenCombine(在重置编号()之前的步骤)(编号,型号)->{
MyObj MyObj=model.MyObj;
myObj.设置编号(编号);
if(myObj.getNumber()==100){
//做点什么
}
收益模型;
});
}
公共CompletableFuture步骤在重置编号()之前{
//转到其他各种类/方法

IMO,使用
CompletableFuture
您可以更轻松地异步设置数字。以下是一种可能的方法:

public CompletableFuture<Model> setNumberAsync() {
    return CompletableFuture.supplyAsync(() -> helper.decrypt())
            .thenCombine(stepsBeforeSettingNumber(), (number, model) -> {
                MyObj myObj = model.myObj;
                myObj.setNumber(number);
                if (myObj.getNumber() == 100) {
                    // do something
                }
                return model;
            });
}

public CompletableFuture<Model> stepsBeforeSettingNumber() {
    //  going to various other classes / methods 

public CompletableFuture setNumberAsync(){
返回CompletableFuture.SupplySync(()->helper.decrypt())
.thenCombine(在重置编号()之前的步骤)(编号,型号)->{
MyObj MyObj=model.MyObj;
myObj.设置编号(编号);
if(myObj.getNumber()==100){
//做点什么
}
收益模型;
});
}
公共CompletableFuture步骤在重置编号()之前{
//转到其他各种类/方法