Lock的tryLock()方法


概述

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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM