1. 程式人生 > >可重入鎖

可重入鎖

pan ron 環境 href nts ble tid body implement

可重入鎖,也叫做遞歸鎖,指的是同一線程 外層函數獲得鎖之後 ,內層遞歸函數仍然有獲取該鎖的代碼,但不受影響。
在JAVA環境下 ReentrantLock 和synchronized 都是 可重入鎖。

下面是使用實例:

public class Test implements Runnable{
 public synchronized void get(){
  System.out.println(Thread.currentThread().getId());
  set();
 }
 public synchronized void set(){
  System.out.println(Thread.currentThread().getId());
 }
 @Override
 
public void run() { get(); } public static void main(String[] args) { Test ss=new Test(); new Thread(ss).start(); new Thread(ss).start(); new Thread(ss).start(); } }

兩個例子最後的結果都是正確的,即 同一個線程id被連續輸出兩次。

結果如下:

Threadid: 8
Threadid: 8
Threadid: 10
Threadid: 10
Threadid: 9
Threadid: 9 可重入鎖最大的作用是避免死鎖。 引一篇例子,比較詳細 http://www.cnblogs.com/dj3839/p/6580765.html

可重入鎖