在Java 中同步字串物件
由於存在多個實例,使用String 物件在多執行緒應用程式上同步操作可能會帶來挑戰具有相同的字串值。為了確保所需快取鍵的正確同步,必須在 String 物件上使用 intern() 方法。
final String key = "Data-" + email; final String internedKey = key.intern(); synchronized(internedKey) { ... }
intern() 方法傳回字串的規範表示,確保所有引用該字串值將引用同一個物件。這允許跨多個線程實現一致的同步。
但是,在內部字串上進行同步可能會引入新的效能考量。在內部,虛擬機器可能會在實習過程中取得鎖,這可能會導致效能下降。
為了緩解潛在問題,請考慮使用與每個鍵關聯的鎖對象,而不是鍵本身。這種方法避免了與內部字串相關的潛在開銷。
Map<String, Object> lockMap = new HashMap<>(); Object lock = lockMap.get(key); if (lock == null) { lock = new Object(); lockMap.put(key, lock); } synchronized(lock) { ... }
透過這種方法,每個鍵都與一個唯一的鎖定物件關聯,確保一次只有一個執行緒可以存取對應的快取操作。
以上是為什麼以及如何在 Java 中同步字串物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!