RanuXD
2019-05-27 10:47
采纳率: 0%
浏览 1.2k

关于Java的线程run方法中为全局变量的赋值问题

为什么在run()方法里为sa赋值,在main方法里执行start()后sa没有+1,
其次为什么sName一开始也没变输出结果是“vandeleur”,而在输出t.sa的时候sName却变为“vandeleur 0 1 2 3”

public class Tux extends Thread {
     static String sName = "vandeleur";
     int sa=33;


    public void run() {
        for (int i = 0; i < 4; i++) {
            sName = sName + " " + i;
        }

        sa+=1;
    }

    public static void main(String argv[]) {
        Tux t = new Tux();
        t.start();
        //System.out.println(t.sa); //如果这条注释后则sName为vandeleur
        System.out.println(sName);
    }

}

注释掉System.out.println(t.sa);的运行结果为:
vandeleur

去掉注释System.out.println(t.sa);的运行结果为:
33
vandeleur 0 1 2 3

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • RanuXD 2019-05-27 11:13

    因为在打印的时候线程未必启动了,所以会出现这种问题,解决办法加上Thread.sleep(time)延迟打印时间

    评论
    解决 无用
    打赏 举报
  • 虾一 2019-05-27 11:28

    两种情况执行个几十次,你会发现每次的输出结果可能不同

    评论
    解决 无用
    打赏 举报
  • 毕小宝 2019-05-27 13:35

    因为对变量的操作和打印是在两个线程里面的。main 方法所在的线程始终处于启动动态,所以先执行了,执行的时候打印的是默认值0.

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题