pengtianshi999 2019-02-14 22:57 采纳率: 50%
浏览 836
已采纳

java System.out.println("当前线程"+Thread.currentThread());返回两个结果是为什么?

package animal;

class HelloThread implements Runnable
{
int i;
public void run()
{

        i=0;
    System.out.println("当前线程"+Thread.currentThread());//第一个
    while(true)
    {       
        System.out.println("当前线程"+Thread.currentThread().getName());
        System.out.println("Hello"+i++);

if(i>5)
    break;
    }

}

}
public class text
{
public static void main(String[]args)
{
HelloThread r=new HelloThread();
Thread t=new Thread(r);
Thread t2=new Thread(r);
t.start();
t2.start();
}
}

结果
当前线程Thread[Thread-1,5,main]
当前线程Thread-1
当前线程Thread[Thread-0,5,main]
当前线程Thread-0
Hello1
当前线程Thread-0
Hello2
Hello0
当前线程Thread-1
Hello3
当前线程Thread-1
Hello4
当前线程Thread-1
Hello5
当前线程Thread-0
Hello6

为什么【第一个】那里的返回了2个地址,上面Hello1前有4个【当前线程。。。。】
他们是有先后顺序的吗

  • 写回答

2条回答 默认 最新

  • qq_42417143 2019-02-15 00:01
    关注

    因为你开了两个线程,所以返回有两个地址。
    一句代码的执行在计算机中也是分为很多步骤的(比如高级语言、汇编语言、二进制转换),有的执行一半可能就会挂起状态(你这里的变量具有非原子性,可能会被占用资源),资源被其他占用,所以这里并不是1到6顺序输出,也不是先完成线程1再线程2的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作