V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
esolve
V2EX  ›  问与答

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

  •  
  •   esolve · 2017-04-02 15:52:32 +08:00 · 3715 次点击
    这是一个创建于 2788 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    用锁阻塞

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

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

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