zshh1995 2016-07-30 15:12 采纳率: 14.3%
浏览 1110

初学java多线程的问题

我看的书上的一个例子

 public class ThreadDemo3
{
    public static void main(String args[])
    {
        TestThread t = new TestThread();
        new Thread(t).start();
        new Thread(t).start();
        new Thread(t).start();
        new Thread(t).start();

    }

}



class TestThread extends Thread
{
    private int tickets = 20;
    public void run()
    {
        while(true)
        {
            if(tickets>0)
                System.out.println(Thread.currentThread().getName()+"出售票"+tickets--);
            else
                break;
        }
    }
}

按照我的想法,tickets应该是依次减小的,但是为什么跑出来的是乱序的呢?

我想的:图片说明

结果:图片说明

  • 写回答

3条回答 默认 最新

  • threenewbee 2016-07-30 15:44
    关注

    System.out.println(Thread.currentThread().getName()+"出售票"+tickets--);
    这一行不是原子操作。tickets--得到表达式的值后,可能发生线程切换,输出别的线程

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器