esolve
V2EX  ›  问与答

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

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