概述
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("結束");
}
}
