当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java ReentrantLock getOwner()用法及代码示例


ReentrantLock 类的 getOwner() 方法返回锁的当前所有者线程。如果不拥有,则返回 null。当不是所有者的线程调用此方法时,返回值反映当前锁状态的 best-effort 近似值。

用法

protected Thread getOwner()

参数

没有传递参数。

返回

所有者,如果不拥有,则为 null

抛出

不会抛出异常。

例子1

//import statement
  
import java.util.concurrent.locks.*;
  
  class ReentrantLockgetOwnerExample1  {
   
     public static void main (String args[]) throws InterruptedException {
    	 ReentrantLockClass lock = new ReentrantLockClass();
       
        MyThread t1 = new MyThread(lock);
      
        t1.start();
        t1.join();
       
     }
  }
   
  class MyThread extends Thread {
   
	  ReentrantLockClass lock;
   
     MyThread(ReentrantLockClass lock){
        this.lock=lock;
       
     }
   
     public void run() {
        if ( ! lock.tryLock()) {
        	 System.out.println(this.getName() + ":lock1 owner:" + lock.owner());
        } 
        System.out.println(this.getName() + ":lock1 owner:" + lock.owner());
       
     }
  }
   
  class  ReentrantLockClass extends ReentrantLock {
     String owner() {
        Thread t =  this.getOwner();
        if (t != null) {
           return t.getName();
        } else {
           return "none";
        }
     }
  }

输出:

Thread-0:lock1 owner:Thread-0

例子2

//import statements
import java.util.concurrent.locks.*;

class ReentrantLockgetOwnerExample2  {
 
   public static void main(String args[]) throws InterruptedException {
	   ReentrantLockClass2 lock1 = new ReentrantLockClass2();
	   ReentrantLockClass2 lock2 = new ReentrantLockClass2();
      MyThread1 thrd1 = new MyThread1(lock1, lock2);
      MyThread1 thrd2 = new MyThread1(lock1, lock2);
      thrd1.start();
      thrd1.join();
      thrd2.start();
      thrd2.join();
   }
}
 
class MyThread1 extends Thread {
 
	ReentrantLockClass2 lock1;
	ReentrantLockClass2 lock2;
 
   MyThread1(ReentrantLockClass2 lock1, ReentrantLockClass2 lock2){
      this.lock1=lock1;
      this.lock2=lock2;
   }
 
   public void run() {
      if ( ! lock1.tryLock()) {
         lock2.tryLock();
      } 
      System.out.println(this.getName() + ":lock1 owner:" + lock1.owner());
      System.out.println(this.getName() + ":lock2 owner:" + lock2.owner());
   }
}
 
class ReentrantLockClass2 extends ReentrantLock {
   String owner() {
      Thread t =  this.getOwner();
      if (t != null) {
         return t.getName();
      } else {
         return "none";
      }
   }
}

输出:

Thread-0:lock1 owner:Thread-0
Thread-0:lock2 owner:none
Thread-1:lock1 owner:Thread-0
Thread-1:lock2 owner:Thread-1




相关用法


注:本文由纯净天空筛选整理自 Java ReentrantLock getOwner() Method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。