[英]Return value from lambda function in background thread, throw NullPointerException
在我的用例中,我想從 lambda function 返回用戶 object,如下面的代碼所示。 在發布我的問題之前,我嘗試了許多類似的問題,例如this和this但沒有一個主題可以解決我的問題,這是我的代碼:
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
}
}
當我運行這段代碼時,我得到“線程中的異常”主“java.lang.NullPointerException”。 我的問題是如何獲得由工作 () function 構建的用戶 object,但是這個 function 應該像代碼一樣在后台線程中運行。
findUser
返回,它返回null
因為mUser
尚未設置。 您需要等待它被設置,或者返回調用者可以等待的Future<User>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.