about4y 2017-01-13 04:36 采纳率: 0%
浏览 971
已结题

java多线程的一个简单问题

 public class Demo6 {
    public static void main(String[] args) {
        Thread6 r = new Thread6();
        Thread t1 = new Thread(r); 
        Thread t2 = new Thread(r); 
        t1.start();
        t2.start();
    }
}

class Thread6 implements Runnable {
    int ticket = 100;
    @Override
    public void run() {
        while(true) {
            if(ticket>0) {
                try {
                    Thread.currentThread().sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"卖。。。"+ticket--);               
            } else {
                break;
            }

        }
    }

}

为什么加了中间的那一段sleep,就出现一定数量的重复卖票,而不加就基本不会出现?输出的时候读到的不应该都是最新的ticket值吗? 如果在输出语句下加一段sleep紧接着ticket再减1,可以理解会大量重复,但是sleep放在上面为什么也会重复呢?

  • 写回答

6条回答 默认 最新

  • _1_1_7_ 2017-01-13 05:07
    关注

    sleep放上、放下不是一样的吗?要转变思维方式,特别是多线程情况下

    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况