我創建了一個Cache
對象,它存儲String
作爲鍵和一個序列化對象作爲值。多個線程可以使用同一CacheManager的相同Ehcache對象嗎?
Cache(String--->Object)
我想運行三個Akka線程,它們以同步方式檢索並寫入同一個Ehcache對象。
Thread 1- synchronized (LockForEhcache){
serializedObj = cachename.get("key"); //--- this returns an Object
}
//modify the serializedObj here....
//Again store the modify Object in the Cache
synchronized (LockForEhcache){
cachename.clear();
cachename.put("key",serializedObj);
Thread 2- synchronized (LockForEhcache){
serializedObj = cachename.get("key"); //--- this returns null
}
Thread 3- synchronized (LockForEhcache){
serializedObj = cachename.get("key"); //--- this returns null
}
但是隻有一個線程獲取存儲在Cache
中的值。對於其餘的線程,它會拋出一個NullPointerException
。我無法弄清楚爲什麼。
不知道這些「同步(LockForEhcache)」是關於什麼......但ehcache不需要你同步訪問,它完全是線程安全的使用...如果,另一方面,你試圖同步這些線程,以便線程1在t2和t3進入'get'之前放置,這將不起作用。或者只是說你做了一些事情? –
我正在使用鎖定,以便其他線程不會嘗試**取得**,除非線程1完成其**放**。爲什麼這不起作用? – Sibani
好吧,也許我在這裏「猜測」太多...... t1是主線程,t2和t3是從那裏分離出來的?如果沒有,並且所有三個線程正在爭奪鎖,那麼這個_might_工作,但不確定性(即,你沒有保證t1首先獲取鎖並安裝映射)。 如果t1派生出另外兩個線程,它在安裝映射之後還需要這樣做。鎖只提供排除,而不是排序。 –