java的加鎖和解鎖


 

private static Lock lock = new ReentrantLock();// 鎖對象
/**
* 手動設置鎖
* @param name
* @throws Exception
*/
public static void task(String name) throws Exception{
// TODO 線程輸出方法
lock.lock();// 得到鎖
try {
     //處理業務代碼
for(int i = 0; i < name.length(); i++) {
Thread.sleep(500);
System.out.println(name.charAt(i));
}
}catch (Exception e){
e.printStackTrace();
}finally {
lock.unlock();// 釋放鎖
}
}

 

if (lock.tryLock()) {
      try {
          //處理任務
      } catch (Exception ex){
         
      } finally {
          lock.unlock();    //釋放鎖
     
} else  {
     //如果不能獲取鎖,則直接做其他事情
}


1.java使用lock和synchronize進行鎖處理效果是差不多的,但是lock需要手動去解鎖,並且可以在方法內部任何地方添加,並且一定要在finally中解鎖,但是synchronize可以自動解鎖代碼,
並且只能加在方法、代碼塊上修飾對象
2.Lock接口提供了試圖獲取鎖的tryLock()方法,在調用tryLock()獲取鎖失敗時返回false,這樣線程可以執行其它的操作 而不至於使線程進入休眠。
tryLock()方法可傳入一個long型的時間參數,允許在一定的時間內來獲取鎖。
3.Lock接口的實現類ReentrantReadWriteLock提供了讀鎖和寫鎖,允許多個線程獲得讀鎖、而只能有一個線程獲得寫鎖。讀鎖和寫鎖不能同時獲得。實現了讀和寫的分離,
ReentrantLock是帶有投票性質的lock


免責聲明!

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



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