synchronized 參數的理解


synchronized 是java中用來同步的方法,詳細的就不介紹了。 synchronized的用法為: synchronized(鎖){ 代碼塊 }

這個鎖是什么呢,我看了很多說法但沒有一個能講清楚的。 通過一段時間的使用后逐漸發現了一些synchronized使用的規律 使用synchronized是為了防止多個線程同時處理同一個方法,例如在同一時間使用push方法。 問題在於鎖使用的范圍,其實這個我也不是很清楚,我只說一些我了解的。 這個“鎖”應該就是一個字符串,對於使用相同“鎖”的synchronized,synchronized中的代碼塊不能同時運行,最簡單的例子就是: Thread[] t = new Thread[10]; for (int i = 0; i < t.length; i++) { int finalI = i; t[i] = new Thread(new Runnable() { @Override public void run() { synchronized ("AAAAA") { System.out.println(Thread.currentThread().getName()); try { Thread.sleep(1000); }catch (InterruptedException e){ e.printStackTrace(); } } } }); t[i].start(); } for (int i = 0; i <t.length ; i++) { t[i].join(); }

這和普通的for循環就沒有區別了,因為每個線程用的是同一個“鎖”--"AAAAA",如果把鎖改成Thread.currentThread().getName(),就可以多線程了,因為每一個線程的名字不一樣,所以“鎖”就不一樣。 所以如果要同步就要保證“鎖”是一樣的,或者說地址一樣。


免責聲明!

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



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