JUC系列(二)回顾Synchronized关键字
多線程一直Java開發中的難點,也是面試中的常客,趁著還有時間,打算鞏固一下JUC方面知識,我想機會隨處可見,但始終都是留給有準備的人的,希望我們都能加油!!!
沉下去,再浮上來,我想我們會變的不一樣的。
講Lock接口之前先讓我們一起來回顧一下Synchronized關鍵字吧。我想我們學Java開發這么久,不可能還有那個小伙伴沒有用過synchronized
夕陽
一、synchronized 作用范圍:
synchronized 是 Java 中的關鍵字,是一種同步鎖。它修飾的對象有以下幾種:
修飾某一處代碼塊,被修飾的代碼塊稱為同步語句塊。作用范圍就是{}之間。作用的對象是調用這個代碼塊的對象。
synchronized (this){System.out.println("同步代碼塊 "); }修飾在方法上,被修飾的方法就稱為同步方法。作用范圍則是整個方法。作用的對象則是調用這個方法的對象。
public synchronized void sale() {}注:1)synchronized 關鍵字不能被繼承,如果父類中某方法使用了synchronized 關鍵字,字類又正巧覆蓋了,此時,字類默認情況下是不同步的,必須顯示的在子類的方法上加上才可。當然,如果在字類中調用父類中的同步方法,這樣雖然字類并沒有同步方法,但子類調用父類的同步方法,子類方法也相當同步了。
. 修飾某個靜態的方法,其作用的范圍是整個靜態方法,作用的對象是這個類的所有對象。
public static synchronized void test(){}修飾某個類,其作用的范圍是 synchronized 后面括號括起來的部分,作用的對象是這個類的所有對象。
class Ticket {public void sale() {synchronized (Ticket.class) {}} }二、案例:
最后:我們拿synchronized 寫一下多線程中的賣票的經典案例:
public class SynchronizedDemo {public static void main(String[] args) {Ticket ticket = new Ticket();new Thread(() -> {for (int i = 0; i < 40; i++) {ticket.sale();}}, "A").start();new Thread(() -> {for (int i = 0; i < 40; i++) {ticket.sale();}}, "B").start();new Thread(() -> {for (int i = 0; i < 40; i++) {ticket.sale();}}, "C").start();} }class Ticket {//票數private int number = 30;//操作方法:賣票public synchronized void sale() {//判斷:是否有票if (number > 0) {System.out.println(Thread.currentThread().getName() + " : " + (number--) + " " + number);}} }三、總結:
synchronized 的同步效率非常低,因為一個如果某一塊代碼被synchronized 修飾了,當某一個線程進入了synchronized 修飾的代碼塊,那么其他線程只能一直等待,等待獲取鎖的線程釋放鎖,才能進入再次進入同步代碼塊。
獲取鎖的線程釋放鎖的情況只有兩種:
那么你試想一個如果獲取到鎖的這個線程,由于一些等待IO原因或其他原因被堵住了,但是又不能釋放鎖,其他線程就只能在synchronized的門口看著啦,你想一下這個效率吧,出現一次,可能就把人心態玩沒啦哈。😂
因此非常需要有一種機制能夠不讓等待的線程一直無限期的等待下去,比如改成等待一段時間或者響應中斷,該怎么做呢?
我們可以通過Lock來做這件事情。
四、自言自語
關于Lock的知識點就在下一篇文章中哦。
最近又開始了JUC的學習,感覺Java內容真的很多,但是為了能夠走的更遠,還是覺得應該需要打牢一下基礎。
最近在持續更新中,如果你覺得對你有所幫助,也感興趣的話,關注我吧,讓我們一起學習,一起討論吧。
你好,我是博主寧在春,Java學習路上的一顆小小的種子,也希望有一天能扎根長成蒼天大樹。
希望與君共勉😁
待我們,別時相見時,都已有所成。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的JUC系列(二)回顾Synchronized关键字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 设计模式(一)之单例模式 理论
- 下一篇: JUC系列(五)| Synchonize