专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » java中接口的实现:Java 中LockSupport类在C#中的实现 »正文

java中接口的实现:Java 中LockSupport类在C#中的实现

来源: 发布时间:星期五, 2009年1月9日 浏览:16次 评论:0
  Java 5的后提供优秀并发库util.concurrent.Net中缺乏类似功能由于硬件体系发生了变化多核时代来临.NET中缺乏并发类库显然不合时宜缓解这矛盾其中个办法就是在往C#中移植javautil.concurrent   java中util.concurrent包中提供了个类LockSupportutil.concurrent包很多关键实现需要LockSupport如果需要把javautil.concurrent包迁移到C#中LockSupport类迁移是不可避免问题

  在java中LockSupport类有如下思路方法:

以下是引用片段:
  publicvoidpark(Objectblocker){
  Threadt=Thread.currentThread;
  Blocker(t,blocker);
  unsafe.park(false,0L);
  Blocker(t,null);
  }


  当个线程LockSupport.park的后线程就会停下载类似于Object.wait或者.NET中.Threading.Monitor.Wait但问题是java中Object.wait和.NET中Monitor.wait都需要个waitObject这个问题曾经困扰我为此翻了遍JDK 6实现源码到最后发现解决办法却是很简单也无需了解JDK底层实现源码

以下是引用片段:
  publicLockSupport
  {
  privateLocalDataStoreSlotslot=Thread.GetNamedDataSlot("LockSupport.Park");
  publicvoidPark(Objectblocker)
  {
  Threadthread=Thread.CurrentThread;
  Thread.SetData(slot,blocker);
  lock(thread)
  {
  Monitor.Wait(thread);
  }
  }
  publicvoidUnpark(Threadthread)
  {
  (threadnull);
  lock(thread)
  {
  Monitor.Pulse(thread);
  }
  }
  }


  其中slot是可以不需要但是参考JDK util.concurrentLockSupport代码中看到使用slot(javaThreadLocal)可以方便跟踪调试

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: