诡异的代码,进来看看

Android 码拜 4年前 (2016-03-28) 278次浏览
子线程是无法返回数据的,所以创建一个成员变量来接收子线程中的数据,问一下这句话的问题在哪?本人本人也感觉不妥当。
代码中本人打LOG日志,得到是a=null,b=null,但是本人打断点,a=1,b=1,这是见鬼了吗

public class Aa {
    public String a;//成员a是存放在堆内存的
    public void getData2(){
        String b=getData();
        Log.i("Aa", "a=" + a + "||" + "b=" + b);
    }
    public String getData(){
        try {
            Thread.currentThread().sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        new Thread(new Runnable() {
            @Override
            public void run() {
                a = "1";
            }
        }).start();
        return a;
    }
}
解决方案

40

你没有同步,getData是异步的,所以log不会等到getData执行完,所以打印时,getData还没执行,所以是null,及用handler去处理

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明诡异的代码,进来看看
喜欢 (0)
[1034331897@qq.com]
分享 (0)