簡體   English   中英

在后台線程中從 lambda function 返回值,拋出 NullPointerException

[英]Return value from lambda function in background thread, throw NullPointerException

在我的用例中,我想從 lambda function 返回用戶 object,如下面的代碼所示。 在發布我的問題之前,我嘗試了許多類似的問題,例如thisthis但沒有一個主題可以解決我的問題,這是我的代碼:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM