从线程中返回数据和向线程传递数据类似,也可以通过类成员以及回调函数来返回数据,但类成员在返回数据和传递数据时有一些区别,下面让我们来看看它们区别在哪。
一、通过类变量和方法返回数据
使用这种方法返回数据需要在调用start方法后才能通过类变量或方法得到数据,让我们先来看看会得到什么结果:
package mythread;
public class MyThread extends Thread
{
private String value;
public void run()
{
value = "通过成员变量返回数据";
}
public static void main(String[] args) throws Exception
{
MyThread thread = new MyThread();
thread.start();
System.out.println("value:" + thread.value);
}
}
运行上面的代码有可能输出如下的结果:
value1:null
从上面的运行结果看很不正常。在run方法中已经对value赋了值,而返回的却是null.发生这种情况的原因是调用start方法后就立刻输出了value的值,而这里run方法还没有执行到为value赋值的语句。要避免这种情况的发生,就需要等run方法执行完后才执行输出value的代码。因此,我们可以想到使用sleep方法将主线程进行延迟,如可以在thread.start()后加一行如下的语句: