[英]ConcurrentHashMap values become empty
我有兩個類,其中一個實現可運行的,這一個從網站獲取數據,然后將其放入ConcurrentHashMap中,另一個稍后再獲取此數據。 第一類成功獲取數據並將其放入地圖中,我可以看到地圖已滿,但是當另一類嘗試獲取數據時,鍵在這里,但值變為空。
public class KAuctionThread extends KObject implements Runnable
{
...
KParserMapBaseClass.getLiveStreamMap( this.getThreadConfig( ).getDataSource( ) ).put( realTimeActionKey, di ) ;
...
}
這行將數據放入下面的地圖中
public abstract class KParserMapBaseClass extends KObject implements Callable<KDownloadInfo>
{
public static ConcurrentHashMap<String, ConcurrentHashMap<String, KDownloadInfo>> liveStream = new ConcurrentHashMap<>( ) ;// !!!
...
...
public static ConcurrentHashMap<String, KDownloadInfo> getLiveStreamMap( String dataSource )
{
ConcurrentHashMap<String, KDownloadInfo> dataSourceMap = KParserMapBaseClass.liveStream.get( dataSource ) ;
if( dataSourceMap == null )
{
dataSourceMap = new ConcurrentHashMap<String, KDownloadInfo>( ) ;
KParserMapBaseClass.liveStream.put( dataSource, dataSourceMap ) ;
}
return dataSourceMap ;
}
}
當第一堂課把數據放在eclipse表達式中時,我可以看到它:
{B2BOtoNet={someurl=com.lib1k.cmap.agent2.KDownloadInfo@622d2710}}
但是當另一個階級試圖達到
ConcurrentHashMap<String, KDownloadInfo> map = KParserMapBaseClass.getLiveStreamMap( di.dataSource ) ;
if( map != null && map.size( ) > 0 )
{
String key = map.keySet( ).iterator( ).next( ) ;
KDownloadInfo rtdi = map.remove( key ) ;
return rtdi ;
}
地圖變成這樣:
{B2BOtoNet={}}
沒有其他可放入或獲取數據的類
沒有可復制的例子很難說。 可能是此方法不是原子方法,並且您將覆蓋映射中之前已創建的實例。
public static ConcurrentHashMap<String, KDownloadInfo> getLiveStreamMap(String dataSource)
{
ConcurrentHashMap<String, KDownloadInfo> dataSourceMap = KParserMapBaseClass.liveStream.get(dataSource) ;
if (dataSourceMap == null)
{
dataSourceMap = new ConcurrentHashMap<String, KDownloadInfo>();
KParserMapBaseClass.liveStream.put(dataSource, dataSourceMap);
}
return dataSourceMap;
}
您可以更簡潔,更原子地執行相同的操作:
public static ConcurrentHashMap<String, KDownloadInfo> getLiveStreamMap(String dataSource)
{
return liveStream.computeIfAbsent(dataSource, k -> new ConcurrentHashMap<>());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.