Return 来自后台线程中 lambda 函数的值,抛出 NullPointerException

Return value from lambda function in background thread, throw NullPointerException

在我的用例中,我想 return 来自 lambda 函数的用户对象,如下面的代码所示。在发布我的问题之前,我尝试了许多类似的问题,例如 this and 但没有主题可以解决我的问题,这是我的代码:

public class User {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class AppDatabase {

    private static final int NUMBER_OF_THREADS = 4;

    public static final ExecutorService databaseWriteExecutor =
            Executors.newFixedThreadPool(NUMBER_OF_THREADS);

}

public class MyClass {

    private User mUser;

    public User findUser(){
        AppDatabase.databaseWriteExecutor.execute(() -> {
            mUser = work();
        });

        return mUser;
    }

    public User work(){
        //simulate get user from database
        User user = new User();
        user.setName("Toto");
        return user;
    }
}

public class Main {

    public static void main(String[] args) {
        MyClass myClass = new MyClass();
        User user;
        user = myClass.findUser();

        System.out.println(user.getName()); //this line: Exception in thread "main" java.lang.NullPointerException
    }
}

当我 运行 这段代码时,我得到 "Exception in thread" main "java.lang.NullPointerException"。我的问题是如何获得由 work () 函数构建的 User 对象,但是这个函数应该 运行 在后台线程中,就像在代码中一样。

findUser return 马上, return 就 null 因为 mUser 还没有设置。您需要等待它被设置,或者 return 调用者可以等待的 Future<User>