从Java中的Runnable(Thread)获取返回值

-2 java multithreading android runnable

这个线程完成后,有没有办法让我传递"r"的值?我相信我在9或10个月之前在另一个项目上做过这个但是对于我而言,我不记得找到代码的项目了.我花了大约5个小时来挖掘代码和谷歌搜索,但是由于我不经常在Java\Android中开发,所以我已经完全放弃了我的想法.

下面是我的代码,以及我上次做这个时的记忆.我有点记得".call()"或".get()",但试图在android文档中找到一些东西.我不确定.我只能找到"可赎回".

public void updateUserProfile(){

if(checkFields(){
//Do Something
}else{
//Do Something
}

}


 public boolean checkFields(){

Boolean r = false;



     Runnable run = new Runnable(){
                    //Boolean r;
                @Override
                public void run() {

                    //Or boolean r;

                    //get value of r.
                    r = php.UpdateProfile.updateProfile(user_id, user_email);
                }
            };

            new Thread(run).start();

            return r; //run.get(r)?
}
Run Code Online (Sandbox Code Playgroud)

krc*_*ols 5

你正在做的是创建一个实现Runnable的匿名内部类的实例.因此,您可以访问包含类的字段.将代码的结果存储在其中一个中.

当然要小心在主线程和您在此处创建的线程之间同步对此结果变量的访问.

public class TestThreads {
    static int r = 0;
    public static void main(String[] args) {
        Runnable run = new Runnable() {
            public void run() {
                r = 20;
            }
        };
        Thread t = new Thread(run);
        t.start();
        try {
            t.join();
        }
        catch(InterruptedException e) {
            return;
        }
        System.out.println("Result: " + r);
    }
}
Run Code Online (Sandbox Code Playgroud)