synchronized放在循环外面和在循环里面的区别

编程入门 行业动态 更新时间:2024-10-28 00:21:42

synchronized<a href=https://www.elefans.com/category/jswz/34/1761492.html style=放在循环外面和在循环里面的区别"/>

synchronized放在循环外面和在循环里面的区别

放在while外面就是进循环之前判断一次synchronized(){},能进去的话就进去执行while循环。而进while循环之后就不再判断synchronized(){}了。
放在while里面就是每次执行while循环的时候执行到synchronized(){}语句都要进行判断synchronized()

举个例子说下

(1)写在while外面的时候:比如你截图的这个代码功能应该是模拟售票的吧。比如有三个线程t1,t2,t3模拟1、2、3号窗口售票。如果你写在while外面的话,比如t2一旦拿到cpu执行权,并且判断synchronized(){}通过的话,就一直是t2窗口在卖票了,因为这时候t1和t3判断synchronized(){}是锁的都进不来,t2就一直在while循环,直到t2while循环完毕出来的时候,t1或者t3才能进去,这时候票已经卖完了。
说简单点就是,t1,t2,t3任意一个线程先拿到执行权的话就会一直是它在循环了。因为没有能停下来的语句,别的线程也执行不了,因为synchronized(){}是锁的。只有该线程循环完出来的时候,synchronized(){}才是打开的。这时候就不能满足t1,t2,t3随机进入while循环

    (2)如果写在while里面就不同了,这三个线程不论是谁得到cpu执行权都会先进入while循环,然后判断synchronized(){}是否是锁的,如果不是就可以卖出一张票,如果是就等待别的线程先执行完。

(3)简单拿模拟窗口卖票来说,我们看到的执行效果的区别就是:
A:锁在while外面的时候,运行程序,不管有多少个窗口也总是一个窗口在卖票,从头卖到尾绝对永远都是先进入循环的那个线程会把所有票卖完

        B:锁在while循环里面的时候,会是随机的一个窗口在卖,如果是三个线程的话,就应该是三个窗口都有在卖。

更多推荐

synchronized放在循环外面和在循环里面的区别

本文发布于:2024-02-26 05:01:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1701430.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:放在   区别   synchronized

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!