在用synchronized关键字实现交替打印奇偶数时打印出了101

来源:7-7 交替打印

ice_wolf

2019-09-25

老师您好,我在看完您的视频后自己写了用synchronized关键字实现0~100奇偶数交替打印,但是我得到的最终结果里却有101,和您代码比对之后发现我再while循环的条件里用的是<=,我想不明白的是当Thread-0打印出100,count变为101之后应该不满足循环条件了,为什么101还会被打印出来。以下是我的代码:

/**
 * Description: 用synchronized关键字实现两个线程交替打印0~100中的奇偶数
 */
public class WaitNotifyPrintOddEvenSyn {

    private static final Object lock = new Object();
    private static int count = 1;


    //为什么最后打印出了101
    public static void main(String[] args) {
        new Thread(() -> {
            while (count <= 100){
                synchronized (lock){
                    if ((count & 1) == 0){
                        System.out.println(Thread.currentThread().getName() + ": " + count++);
                    }
                }
            }
        }).start();

        new Thread(() -> {
            while (count <= 100){
                synchronized (lock){
                    if ((count & 1) == 1){
                        System.out.println(Thread.currentThread().getName() + ": " + count++);
                    }
                }
            }
        }).start();
}
写回答

1回答

悟空

2019-09-25

count=100时,两个线程都会进入while,然后自然就是一个打印100,一个打印101

2
3
ice_wolf
回复
悟空
谢谢老师
2019-09-25
共3条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程