概述
tryLock 是防止自鎖的一個重要方式。
tryLock()方法是有返回值的,它表示用來嘗試獲取鎖,如果獲取成功,則返回true,如果獲取失敗(即鎖已被其他線程獲取),則返回false,這個方法無論如何都會立即返回。在拿不到鎖時不會一直在那等待。
package test; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; //學習 tryLock //tryLock()方法是有返回值的,它表示用來嘗試獲取鎖,如果獲取成功,則返回true,如果獲取失敗(即鎖已被其他線程獲取),則返回false,這個方法無論如何都會立即返回。在拿不到鎖時不會一直在那等待。 public class tryLock { public static void main(String[] args) { System.out.println("開始"); final Lock lock = new ReentrantLock(); new Thread() { @Override public void run() { String tName = Thread.currentThread().getName(); if (lock.tryLock()) { System.out.println(tName + "獲取到鎖!"); } else { System.out.println(tName + "獲取不到鎖!"); return; } try { for (int i = 0; i < 5; i++) { System.out.println(tName + ":" + i); } Thread.sleep(5000); } catch (Exception e) { System.out.println(tName + "出錯了!!!"); } finally { System.out.println(tName + "釋放鎖!!"); lock.unlock(); } } }.start(); new Thread() { @Override public void run() { String tName = Thread.currentThread().getName(); if (lock.tryLock()) { System.out.println(tName + "獲取到鎖!"); } else { System.out.println(tName + "獲取不到鎖!"); return; } try { for (int i = 0; i < 5; i++) { System.out.println(tName + ":" + i); } } catch (Exception e) { System.out.println(tName + "出錯了!!!"); } finally { System.out.println(tName + "釋放鎖!!"); lock.unlock(); } } }.start(); System.out.println("結束"); } }