java线程内调用别的线程有关的问题.

我有2个线程类Test和Test2.主函数类tett.我在Test类中定义了一个变量t.并且在调用线程Test类后修改该变量,并且在调用处需要获取到修改后的变量值.//主... 我有2个线程类Test和Test2.
主函数类tett.
我在Test类中定义了一个变量t.并且在调用线程Test类后修改该变量,并且在调用处需要获取到修改后的变量值.
//主函数类
public class tett {
public static void main(String[] args) {//主函数
Test t=new Test();
t.start();//调用线程Test
System.out.println("t.t===="+t.t+"\nt.getT()="+t.getT());//输出线程调用后的线程内的变量值
//疑问1\ 为什么 这2个值在Test类没有调用线程Test2类的时候是相同的?
//疑问2\ 为什么 在Test类调用了Test2线程类的时候输出的2个事相同的?
//我要实现的目的就是:无论在Test类里面是否调用了线程,我在tett类里面都想获取改变后的变量值,该怎么实现?
}
}

//线程类1.Test
public class Test extends java.lang.Thread{
public void run(){
// Test2 tt=new Test2();
//tt.start();
this.sett("class.test");
System.out.println("class.test="+t);

}
public String t="21" ;
public String getT(){
return this.t;
}
public void sett(String tt){
this.t=tt;
}

}
//线程类2.Test2

public class Test2 extends java.lang.Thread{
public void run(){
System.out.println("class.Test2");
}
}

个位高手请帮帮忙解决下.
展开
 我来答
daay1986
推荐于2016-02-05 · TA获得超过6018个赞
知道大有可为答主
回答量:2208
采纳率:0%
帮助的人:1479万
展开全部
两个值你这样打印出来肯定是相同的,因为别的线程还没启动。不要认为多线程就是几个线程真的是在一起运行,在运行的现场永远只有一个,只有当前线程结束或者挂起别的线程才有机会运行。在你代码里主函数在运行的时候,虽然你启动了别的线程但是这个时候主函数的还在运行,也就是说主函数所在的线程占据了cpu,所以你其他线程是没有启动的,当然那些线程里的代码也是没作用的。你打印的值当然是一样的。

对于你第三个问题,你就是想让t线程运行起来,然后才能做接下来的动作吧。
import java.util.logging.Level;
import java.util.logging.Logger;

public class tett {

public static void main(String[] args) {//主函数
Test t = new Test();
t.start();//调用线程Test
try {

Thread.sleep(300);
} catch (InterruptedException ex) {
Logger.getLogger(tett.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("t.t====" + t.t + "\nt.getT()=" + t.getT());//输出线程调用后的线程内的变量值
}
}
把你代码改成这样就可以了,让主函数的线程休眠,让出cpu,这样你的t线程就开始运行了,而一旦t线程运行起来主函数也就只能在t线程运行结束才能接着往下走了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式