java ren

matinhua的小站

  DonewsBlog  |  Donews首页  |  Donews社区  |  Donews邮箱  |  我的首页  |  联系作者  |  聚合   |  登录
  189篇文章 :: 0篇收藏:: 39篇评论:: 3个Trackbacks

文章

收藏

相册

存档


正在读取评论……


上锁

在 Java 编程中,所有的对象都有锁。线程可以使用 synchronized 关键字来获得锁。在任一时刻对于给定的类的实例,方法或同步的代码块只能被一个线程执行。这是因为代码在执行之前要求获得对象的锁。

class CopyMachine {

   public synchronized void makeCopies(Document d, int nCopies) {
      //only one thread executes this at a time
   }

   public void loadPaper() {
      //multiple threads could access this at once!

      synchronized(this) {
         //only one thread accesses this at a time
         //feel free to use shared resources, overwrite members, etc.
      }
   }
}

Fine-grain 锁
在对象级使用锁通常是一种比较粗糙的方法。为什么要将整个对象都上锁,而不允许其他线程短暂地使用对象中其他同步方法来访问共享资源?如果一个对象拥有多个资源,就不需要只为了让一个线程使用其中一部分资源,就将所有线程都锁在外面。由于每个对象都有锁,可以如下所示使用虚拟对象来上锁:

class FineGrainLock {   MyMemberClass x, y;   Object xlock = new Object(), ylock = new Object();   public void foo() {      synchronized(xlock) {         //access x here      }      //do something here - but don't use shared resources      synchronized(ylock) {         //access y here      }   }   public void bar() {      synchronized(this) {         //access both x and y here      }      //do something here - but don't use shared resources   }}

若为了在方法级上同步,不能将整个方法声明为 synchronized 关键字。它们使用的是成员锁,而不是 synchronized 方法能够获得的对象级锁。



Trackback: http://tb.donews.net/TrackBack.aspx?PostId=465889


[点击此处收藏本文]  发表于2005年07月14日 4:50 PM




正在读取评论……

发表评论

大名:
网址:
验证码
评论