esolve
V2EX  ›  问与答

Java : while 循环和锁阻塞,哪个更耗资源?

  •  
  •   esolve · Apr 2, 2017 · 4483 views
    This topic created in 3501 days ago, the information mentioned may be changed or developed.

    while 的情况 譬如 while(p=null){}

    然后在另一个地方 p 赋值为非 null

    用锁阻塞

    synchronized(obj){ obj.wait(); }

    然后在另一个地方 obj.notify();

    10 replies  •  2017-04-03 14:03:43 +08:00
    siriussilen
    siriussilen
    Apr 2, 2017
    1
    当然是忙等待啦~~~
    izhaohui
    izhaohui
    Apr 2, 2017 via Android
    2
    锁是会让出 cpu 资源的
    hjc4869
    hjc4869
    Apr 2, 2017 via Android
    3
    楼主可以了解一下自旋锁以及其应用场景
    kaneg
    kaneg
    Apr 2, 2017 via iPhone
    4
    简单的说, while 循环的线程是一直处于运行状态,而 wait 则是阻塞状态,即让出 CPU 时间片。
    esolve
    esolve
    OP
    Apr 2, 2017
    5
    @kaneg 那锁是如何被唤醒的?异步信号机制?
    kenken
    kenken
    Apr 2, 2017
    6
    你这个就是自旋锁和排他锁的区别。 自旋锁一般用在非常短的锁等待上,配合 cas 效率更高,上下文切换更少。排他锁用途广泛,需要上下文切换,效率肯定比自旋锁要低。 自旋锁占资源多
    wwqgtxx
    wwqgtxx
    Apr 2, 2017 via iPhone
    7
    @esolve 请参见 LockSupport 这个 Class 的操作, jdk1.6+之后内置了
    SoloCompany
    SoloCompany
    Apr 3, 2017
    8
    我不小心点了一下楼主的问题列表。。。
    wwqgtxx
    wwqgtxx
    Apr 3, 2017 via iPhone
    9
    @SoloCompany 然后发现我们俩貌似回复了他提的每个问题😂
    sagaxu
    sagaxu
    Apr 3, 2017 via Android
    10
    @SoloCompany 我也看了下,楼主肯定不是计算机专业的😁
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5416 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 02:51 · PVG 10:51 · LAX 18:51 · JFK 21:51
    ♥ Do have faith in what you're doing.