reentrantlock和synchronized區別
作用跟synchronized 鎖一樣
reentrantlock 底層是 cas (值,期望,預期) synchronized 底層鎖公升級
reentrantlock 可以trylock 嘗試鎖
a. 如果在某時間段內獲取到鎖,就執行
b. 如果拿不到鎖,不需要跟synchronized一樣wait,可以直接跳過,繼續執行**
需要手動釋放鎖,必須try catch finally lock.unlock
synchronized 自動釋放鎖
reentrantlock 可以打斷鎖 interrupt 停止等待,跳過被鎖部分,執行別的**
reentrantlock 可以是公平鎖, synchronized 只能是競爭鎖
多執行緒的鎖是加在物件上面的,放在物件的markworld上面,當執行緒來的時候,看物件上的markworld上的值是否是該執行緒,是執行,不是,等待
該方法測試 lock鎖 鎖重入 trylock(返回時間到了,是否拿到鎖)
public class thread_09_reentrantlock
}catch (exception e)finally
}private void push()catch (exception e)finally
}private void trylock()catch (exception e)finally
system.out.println("方法三結束");
}public static void main(string args)
}
reentrantlock 可以被打斷的鎖 (condition問題,生產者消費者解決)public class thread_10_reentrantlock_interrupt ).start();
trycatch (exception e)
thread t2 = new thread(() -> );
t2.start();
trycatch (exception e)
system.out.println("我受夠了無邊的等待");
t2.interrupt(); //打斷執行緒二的等待
}private static void sleepmax(thread_10_reentrantlock_interrupt t) catch (exception e)finally
}private static void method2(thread_10_reentrantlock_interrupt t) catch (exception e)finally
system.out.println(t.lock.trylock()+"我釋放鎖了");}}
}
reentrantlock 公平鎖public class thread_11_reentrantlock_fair catch (exception e)
system.out.println(threadname+"獲取到鎖了");
lock.unlock();}}
public static void main(string args) ).start();
new thread(()->).start();
}}
countdownlatch 管理執行緒 – 執行緒門栓public class thread_12_countdownlatch
count.countdown();
}/**
* 使用執行緒安全的類 cas
*/private void insertnum()
count.countdown();
}public static void main(string args)
threadlist.foreach((o)->o.start());
trycatch (exception e)
system.out.println("總數為"+t.atomicinteger);
}}
countdownlatch 和 thread.join 區別:
countdownlatch 比較靈活,可以在任何時間countdown
**裡面一定要try catch finally裡面 countdown
個人喜歡countdownlatch
C 多執行緒Lock
一.為什麼要lock,lock了什麼?當我們使用 執行緒的時候,效率最高的方式當然是 非同步,即各個執行緒同時執行,其間不相互依賴和等待。但當不同的執行緒都需要訪問某個資源的時候,就需要 同步機制 了,也就是說當對同乙個資源進行讀寫的時候,我們要使該資源在同一時刻只能被乙個執行緒操作,以確保每個操作...
Java多執行緒 Lock
reentrantlock可以和synchronized達到一樣的效果,並且擴充套件功能上也更加強大,而且使用更加靈活。lock lock new reentrantlock 加鎖 lock.lock 取消鎖 lock.unlock 等待通知模式 synchronized與wait 和notify方...
多執行緒系列九 lock
public inte ce lock即在不同方法中呼叫lock,獲得的都是物件鎖。public class conditiontest catch interruptedexception e finally system.out.println after await public void s...