Android-Java-synchronized同步鎖機制&利與弊


synchronized同步鎖機制

 

定義鎖🔒的方式一:

package android.java.thread09;

public class Test implements Runnable {

  /**
   * 定義一個鎖🔒,此鎖🔒是共享的,這個鎖是Java內部要去判斷用的,屬於隱士的 看不到的
   * Java內部的實現屬於 🔒鎖機制
   */
   Object lock = new Object();
    
    @Override
    public void run() {

        synchronized (lock) {
            /**
             * 多線程操作共享數據
             * 重復執行引發的問題
             * ...........
             */
        }

    }
}

 

定義鎖🔒的方式二:

package android.java.thread09;

public class Test2 implements Runnable {

    @Override
    public void run() {

        /** Test2.class 認為是一個鎖🔒,Test2.class是共享的鎖🔒,這個鎖是Java內部要去判斷用的,屬於隱士的 看不到的
         *  Java內部的實現屬於 🔒鎖機制
         */
        synchronized (Test2.class) {
            /**
             * 多線程操作共享數據
             * 重復執行引發的問題
             * ...........
             */
        }

    }
}

 

定義鎖🔒的方式 ......    還有很多方式

 


 

 

舉例:高鐵上的廁所:

1.廁所門顯示無人,高鐵上有五個人,這五個人誰先進去(代表誰被CPU執行了)

 

     synchronized (廁所門顯示無人 🔓) {
            // 上廁所任務
            ........
        }

2.廁所門顯示有人,高鐵上有五個人,進去了一個人,進去的這個人一旦進去就會把門🔒上,其他四個人在門外等着,進不去

     synchronized (廁所門顯示有人 🔒) {
            // 上廁所任務
            ........
        }

3.進去的哪個人,上完廁所了,鎖就打開了,廁所門上顯示無人,  其他四個人誰先進去(主要看CPU執行權在哪個線程上執行)

     synchronized (廁所門顯示無人 🔓) {
            // 上廁所任務
            ........
        }
        上完廁所了,鎖就打開🔓,廁所門上顯示無人

 

 


 

 

synchronized同步代碼塊利與弊

1.好處是:synchronized同步代碼,解決安全問題。

2.壞處是:每次都需要判斷synchronized(的🔒是否 鎖住),有點耗性能;

總結:1.完全問題解決,   2.有點耗性能,  當然選擇1.完全問題解決

 


免責聲明!

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



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