电话:0731-83595998
导航

用信号量Semaphore实现互斥锁Mutex

来源: 2017-12-23 16:07

 百度广告

  在Doug lea的那本著名的《Java并发编程-设计原则与模式》,英文名" Concurrent Programming in Java™: Design Principles and Patterns, Second Edition",书中提到可以用信号量Semaphore实现互斥锁Mutex。虽然java中是通过synchronize关键字提供锁,并用这个基础设施实现信号量的。在有的系统中只有信号量这一原语,锁是通过信号量实现的。代码
import java.util.concurrent.Semaphore;
public class Mutex ...{

   s.acquire();
  public void release()...{
   }
   return s.tryAcquire(ms);
}
上面的代码只能在java5中编译通过,因为Semaphore是在java5中才提供的。我在读上面的代码时有疑问。因为如果错误的连续调用release两次,然后两个线程都调用acquire,岂不是这两个线程都可以同时运行,从而违背了互斥锁的定义?为了证明我的猜测,写了如下的代码:

public class TestMutex ...{
    Mutex mutex=new Mutex();
    mutex.release();
    new MyThread(mutex).start();
  }
}
class MyThread extends Thread...{

    this.mutex=mutex;

    try ...{
    } catch (InterruptedException e1) ...{
    }
      System.out.print(i);
        try ...{
        } catch (InterruptedException e) ...{
        }
    }
  }

该程序的输出
从而证实了我的猜测。

编辑推荐:

下载Word文档

温馨提示:因考试政策、内容不断变化与调整,长理培训网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准! (责任编辑:长理培训)

网络课程 新人注册送三重礼

已有 22658 名学员学习以下课程通过考试

网友评论(共0条评论)

请自觉遵守互联网相关政策法规,评论内容只代表网友观点!

最新评论

点击加载更多评论>>

精品课程

更多
10781人学习

免费试听更多

相关推荐
图书更多+
  • 电网书籍
  • 财会书籍
  • 其它工学书籍
拼团课程更多+
  • 电气拼团课程
  • 财会拼团课程
  • 其它工学拼团
热门排行

长理培训客户端 资讯,试题,视频一手掌握

去 App Store 免费下载 iOS 客户端