请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

老师您好,我在看完您的视频后自己写了用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();
}

正在回答 回答被采纳积分+3

1回答

悟空 2019-09-25 17:27:05

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

2 回复 有任何疑惑可以回复我~
  • 提问者 ice_wolf #1
    老师是因为当count=100时另一个打印奇数的线程阻塞在synchonized代码块上,所以之后当打印奇数的线程获得锁时没有经过while条件判断会直接打印101吗
    回复 有任何疑惑可以回复我~ 2019-09-25 18:50:32
  • 悟空 回复 提问者 ice_wolf #2
    恩对的
    回复 有任何疑惑可以回复我~ 2019-09-25 19:49:28
  • 提问者 ice_wolf 回复 悟空 #3
    谢谢老师
    回复 有任何疑惑可以回复我~ 2019-09-25 19:52:07
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信