诡异的代码,大神进来看看

cyand1987 2016-06-27 10:23:13
子线程是无法返回数据的,所以创建一个成员变量来接收子线程中的数据,请问这句话的问题在哪?我自己也感觉不妥当。
代码中我打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;
}
}
...全文
168 2 打赏 收藏 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
节操在此 2016-06-29
  • 打赏
  • 举报
回复
public class Aa {
    public String a;//成员a是存放在堆内存的
 
    public void getData2(){
        getData();
    }
    
    public void getData(){
        try {
            Thread.currentThread().sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        new Thread(new Runnable() {
            public void run() {
                a = "1";
                show(a);
            }
        }).start();
    }
    
    private void show(String b) {
    	System.out.println("a=" + a + "||" + "b=" + b);
	}
    
    public static void main(String[] args) {
		Aa aa = new Aa();
		aa.getData2();
	}
}
大胸逮要异步
bdmh 2016-06-27
  • 打赏
  • 举报
回复
你没有同步,getData是异步的,所以log不会等到getData执行完,所以打印时,getData还没执行,所以是null,及用handler去处理

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧