线程执行先后有关问题

线程执行先后问题public void onClick(View v) {// TODO Auto-generated method stubThread thread new

线程执行先后问题


public void onClick(View v) {
// TODO Auto-generated method stub
Thread thread = new Thread(MainActivity.this);
thread.setPriority(Thread.MAX_PRIORITY);
thread.start();

System.out.println("onlick:" + line);
text.setText("来自服务器的数据:" + line);
}

以上代码是一个Button的onClick事件。
线程里设置了一个socket接收信息,得到的数据保存在全局变量line里。line初始设置为null。
text是TextView对话框。
问题是:当我点击这个按钮后,发现text里显示的是null。而且logcat里System.out.println("onlick:" + line);输出的也是null,之后才显示thread里的system.out,输出的line却是我从服务器得到的值。
怎么解决这个问题?是因为线程抢资源的原因吗? 线程 socket android
[解决办法]
你应该在线程收到数据之后在设置text的值,而不是在onclick函数中直接设置,因为此时数据还没有收到的
[解决办法]
在子线程中收到数据之后,使用handler发消息到主线更新textview的值
[解决办法]
引用:
Quote: 引用:

在子线程中收到数据之后,使用handler发消息到主线更新textview的值

用了handler之后确实text显示正确了。但是,System.out.println("onlick:" + line);输出的还是null,这是哪里的问题?谢谢你啊

这个是因为你调用start后紧根着就会打印line,但这时可能line还没有值
[解决办法]
线程的运行是没有顺序和规律的   你可以试试开10个线程报数   完全无法预测执行顺序  所以这种操作是错误的
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

在子线程中收到数据之后,使用handler发消息到主线更新textview的值

用了handler之后确实text显示正确了。但是,System.out.println("onlick:" + line);输出的还是null,这是哪里的问题?谢谢你啊

这个是因为你调用start后紧根着就会打印line,但这时可能line还没有值
那怎样解决呢,给个思路。。

也放handler里面啊
果然是这样啊。。刚刚我也是这样做的。。但是总感觉handle是为了更新ui来用的。。。有没有别的方法?handler是不是就是线程间通信用的?我刚学android不久,不太懂。。。


别误解了,这里的handler只不过放在线程里面去做的.不用handler也可以.你需要有个同步机制等线程里面执行完了在System.out.println("onlick:" + line);
同步的话一般用wait-->notify