在本文中,您将会了解到关于WeakHashMap是否具有java.util.concurrent等效项?的新资讯,同时我们还将为您解释weakhashmap详解的相关在本文中,我们将带你探索WeakH
在本文中,您将会了解到关于WeakHashMap是否具有java.util.concurrent等效项?的新资讯,同时我们还将为您解释weakhashmap详解的相关在本文中,我们将带你探索WeakHashMap是否具有java.util.concurrent等效项?的奥秘,分析weakhashmap详解的特点,并给出一些关于c 11 – 相当于java.util.ConcurrentHashMap的C 11、com.intellij.util.containers.ConcurrentWeakHashMap的实例源码、ConcurrentHashMap 与同步 HashMap - ConcurrentHashMap vs Synchronized HashMap、ConcurrentHashMap是否有可能“死锁”?的实用技巧。
本文目录一览:- WeakHashMap是否具有java.util.concurrent等效项?(weakhashmap详解)
- c 11 – 相当于java.util.ConcurrentHashMap的C 11
- com.intellij.util.containers.ConcurrentWeakHashMap的实例源码
- ConcurrentHashMap 与同步 HashMap - ConcurrentHashMap vs Synchronized HashMap
- ConcurrentHashMap是否有可能“死锁”?
WeakHashMap是否具有java.util.concurrent等效项?(weakhashmap详解)
是否可以使用Collections.synchronizedMap()
并发时保持正确性来重写下面的代码?
Collections.synchronizedMap(new WeakHashMap<Class, Object>());
即从java.util.concurrent是否有可以代替的东西?请注意,仅替换为
new ConcurrentHashMap<Class, Object>(new WeakHashMap<Class, Object>()));
显然行不通
答案1
小编典典Guava的CacheBuilder类使您可以轻松地做到这一点。
CacheBuilder.newBuilder().weakKeys().build()
请注意,在您使用实例的情况下,这会将键相等语义更改为,==
而不是.equals()
将其替换为无关紧要,Class
但这是一个潜在的陷阱。
c 11 – 相当于java.util.ConcurrentHashMap的C 11
有这样的图书馆吗?
解决方法
com.intellij.util.containers.ConcurrentWeakHashMap的实例源码
@NotNull private Collection<PsiVariable> getvariablesToFix() { Map<PsiVariable,Boolean> vars = myClass.getUserData(VARS[myFixType]); if (vars == null) myClass.putUserData(VARS[myFixType],vars = new ConcurrentWeakHashMap<PsiVariable,Boolean>(1)); final Map<PsiVariable,Boolean> finalVars = vars; return new AbstractCollection<PsiVariable>() { @Override public boolean add(PsiVariable psiVariable) { return finalVars.put(psiVariable,Boolean.TRUE) == null; } @Override public Iterator<PsiVariable> iterator() { return finalVars.keySet().iterator(); } @Override public int size() { return finalVars.size(); } }; }
private static boolean shouldAbbreviateName(PsiPackage aPackage) { final Project project = aPackage.getProject(); ConcurrentMap<PsiPackage,Boolean> map = project.getUserData(SHOULD_ABBREV_PACK_KEY); if (map == null) { final ConcurrentWeakHashMap<PsiPackage,Boolean> newMap = new ConcurrentWeakHashMap<PsiPackage,Boolean>(); map = ((UserDataHolderEx)project).putUserDataifAbsent(SHOULD_ABBREV_PACK_KEY,newMap); if (map == newMap) { ((PsiManagerEx)PsiManager.getInstance(project)).registerRunnabletoRunOnChange(new Runnable() { @Override public void run() { newMap.clear(); } }); } } Boolean ret = map.get(aPackage); if (ret != null) return ret; ret = scanPackages(aPackage,1); map.put(aPackage,ret); return ret; }
public LoaderFactory(final Project project) { myProject = project; myModule2ClassLoader = new ConcurrentWeakHashMap<Module,ClassLoader>(); myConnection = myProject.getMessageBus().connect(); myConnection.subscribe(ProjectTopics.PROJECT_ROOTS,new ModuleRootAdapter() { public void rootsChanged(final ModuleRootEvent event) { clearClassLoaderCache(); } }); disposer.register(project,new disposable() { public void dispose() { myConnection.disconnect(); myModule2ClassLoader.clear(); } }); }
public LoaderFactory(final Project project) { myProject = project; myModule2ClassLoader = new ConcurrentWeakHashMap<Module,new disposable() { public void dispose() { myConnection.disconnect(); myModule2ClassLoader.clear(); } }); }
private static boolean shouldAbbreviateName(PsiPackage aPackage) { final Project project = aPackage.getProject(); ConcurrentMap<PsiPackage,ret); return ret; }
@NotNull private Collection<SmartPsiElementPointer<PsiField>> getFieldsToFix() { Map<SmartPsiElementPointer<PsiField>,Boolean> fields = myClass.getUserData(FIELDS); if (fields == null) myClass.putUserData(FIELDS,fields = new ConcurrentWeakHashMap<SmartPsiElementPointer<PsiField>,Boolean>(1)); final Map<SmartPsiElementPointer<PsiField>,Boolean> finalFields = fields; return new AbstractCollection<SmartPsiElementPointer<PsiField>>() { @Override public boolean add(SmartPsiElementPointer<PsiField> psiVariable) { PsiField field = psiVariable.getElement(); if (field == null || !isAvailable(field)) return false; return finalFields.put(psiVariable,Boolean.TRUE) == null; } @Override public Iterator<SmartPsiElementPointer<PsiField>> iterator() { return finalFields.keySet().iterator(); } @Override public int size() { return finalFields.size(); } @Override public void clear() { finalFields.clear(); } }; }
@NotNull private static Collection<SmartPsiElementPointer<PsiParameter>> getUnboundedParams(PsiMethod psiMethod) { Map<SmartPsiElementPointer<PsiParameter>,Boolean> params = psiMethod.getUserData(ParaMS); if (params == null) psiMethod.putUserData(ParaMS,params = new ConcurrentWeakHashMap<SmartPsiElementPointer<PsiParameter>,Boolean>(1)); final Map<SmartPsiElementPointer<PsiParameter>,Boolean> finalParams = params; return new AbstractCollection<SmartPsiElementPointer<PsiParameter>>() { @Override public boolean add(SmartPsiElementPointer<PsiParameter> psiVariable) { return finalParams.put(psiVariable,Boolean.TRUE) == null; } @Override public Iterator<SmartPsiElementPointer<PsiParameter>> iterator() { return finalParams.keySet().iterator(); } @Override public int size() { return finalParams.size(); } @Override public void clear() { finalParams.clear(); } }; }
private boolean xmlFileWasChanged(VirtualFile xmlFile,VFileEvent event) { if (!xmlFile.isValid() || !(event instanceof VFileContentChangeEvent)) return true; ConcurrentWeakHashMap<Project,Integer> map = xmlFile.getUserData(CRC_WITHOUT_SPACES); if (map == null) { map = xmlFile.putUserDataifAbsent(CRC_WITHOUT_SPACES,new ConcurrentWeakHashMap<Project,Integer>()); } Integer crc = map.get(myProject); Integer newCrc; try { newCrc = MavenUtil.crcWithoutSpaces(xmlFile); } catch (IOException ignored) { return true; } if (newCrc == -1 // XML is invalid || newCrc.equals(crc)) { return false; } else { map.put(myProject,newCrc); return true; } }
/** * Helper method to return tracked and ignored files map. * * @param event current event * @return map of files */ private ConcurrentMap<VirtualFile,VcsRoot> getTrackedIgnoredFiles(@NotNull AnActionEvent event) { final Project project = event.getProject(); if (project != null) { return IgnoreManager.getInstance(project).getConfirmedIgnoredFiles(); } return new ConcurrentWeakHashMap<VirtualFile,VcsRoot>(); }
@NotNull private Collection<SmartPsiElementPointer<PsiField>> getFieldsToFix() { Map<SmartPsiElementPointer<PsiField>,Boolean.TRUE) == null; } @Override public Iterator<SmartPsiElementPointer<PsiField>> iterator() { return finalFields.keySet().iterator(); } @Override public int size() { return finalFields.size(); } @Override public void clear() { finalFields.clear(); } }; }
@NotNull private static Collection<SmartPsiElementPointer<PsiParameter>> getUnboundedParams(PsiMethod psiMethod) { Map<SmartPsiElementPointer<PsiParameter>,Boolean.TRUE) == null; } @Override public Iterator<SmartPsiElementPointer<PsiParameter>> iterator() { return finalParams.keySet().iterator(); } @Override public int size() { return finalParams.size(); } @Override public void clear() { finalParams.clear(); } }; }
private static <K,V> ConcurrentWeakHashMap<K,V> createWeakMap() { return new ConcurrentWeakHashMap<K,V>(100,0.75f,Runtime.getRuntime().availableProcessors(),ContainerUtil.<K>canonicalStrategy()); }
private static <K,V>(7,TObjectHashingStrategy.CANONICAL); }
/** * Default constructor. * * @param fetcher data fetcher */ private CachedConcurrentMap(@NotNull DataFetcher<K,V> fetcher) { this.map = new ConcurrentWeakHashMap<K,V>(); this.fetcher = fetcher; }
ConcurrentHashMap 与同步 HashMap - ConcurrentHashMap vs Synchronized HashMap
问题:
What is the difference between using the wrapper class, SynchronizedMap
, on a HashMap
and ConcurrentHashMap
? 在 HashMap
和 ConcurrentHashMap
上使用包装类 SynchronizedMap
什么区别?
Is it just being able to modify the HashMap
while iterating it ( ConcurrentHashMap
)? 它是否只能在迭代时修改 HashMap
( ConcurrentHashMap
)?
解决方案:
参考: https://stackoom.com/en/question/5Q44ConcurrentHashMap是否有可能“死锁”?
我们遇到了一个奇怪的问题ConcurrentHashMap
,其中似乎有两个线程正在调用put()
,然后在方法内部永远等待Unsafe.park()
。从外部看,内部看起来像是一个僵局ConcurrentHashMap
。
到目前为止,我们只看到这种情况发生一次。
谁能想到任何可能导致这些症状的东西?
编辑 :相关线程的线程转储在这里:
“ [已编辑]线程2” prio = 10 tid = 0x000000005bbbc800 nid = 0x921等待条件[0x0000000040e93000] java.lang.Thread.State:等待(停车) 在sun.misc.Unsafe.park(本机方法) -停车以等待<0x00002aaaf1207b40>(java.util.concurrent.locks.ReentrantLock $ NonfairSync) 在java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) 在java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:747) 在java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:778) 在java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1114) 在java.util.concurrent.locks.ReentrantLock $ NonfairSync.lock(ReentrantLock.java:186) 在java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262) 在java.util.concurrent.ConcurrentHashMap $ Segment.put(ConcurrentHashMap.java:417) 在java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:883) 于[删除]“ [已编辑]线程0” prio = 10 tid = 0x000000005bf38000 nid = 0x91f等待条件[0x000000004151d000] java.lang.Thread.State:等待(停车) 在sun.misc.Unsafe.park(本机方法) -停车以等待<0x00002aaaf1207b40>(java.util.concurrent.locks.ReentrantLock $ NonfairSync) 在java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) 在java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:747) 在java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:778) 在java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1114) 在java.util.concurrent.locks.ReentrantLock $ NonfairSync.lock(ReentrantLock.java:186) 在java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262) 在java.util.concurrent.ConcurrentHashMap $ Segment.put(ConcurrentHashMap.java:417) 在java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:883) 于[删除]
答案1
小编典典可能不是您想要的答案,但这可能是JVM错误。看到
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6865591
关于WeakHashMap是否具有java.util.concurrent等效项?和weakhashmap详解的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于c 11 – 相当于java.util.ConcurrentHashMap的C 11、com.intellij.util.containers.ConcurrentWeakHashMap的实例源码、ConcurrentHashMap 与同步 HashMap - ConcurrentHashMap vs Synchronized HashMap、ConcurrentHashMap是否有可能“死锁”?的相关信息,请在本站寻找。
本文标签: