草庐IT

java - 静态初始化程序的合法用途?

我记得几年前我使用静态初始化器来调用类级别的设置操作。我记得它有非常奇怪的行为,我只是决定避开它们。也许是因为我弄乱了上下顺序或者是新手。但我遇到了重新审视它们的需要,我想确保没有更好的方法同样简洁。我知道这不流行,但我经常使用数据驱动类来维护从数据库导入的静态实例列表。publicclassStratBand{privatestaticvolatileImmutableListstratBands=importFromDb();privatefinalintminRange;privatefinalintmaxRange;privatestaticImmutableListimpor

java - Guava CacheBuilder 最大尺寸

我想弄清楚您在GuavaCacheBuildermaximumSize()中指定的数字代表什么。假设我的代码中有这样的东西,CacheprogramCache=CacheBuilder.newBuilder().maximumSize(1000).build();我指定为最大大小的1000是否意味着在它开始踢出LRU之前我可以在缓存中拥有一千个不同的条目(无论对象可能有多大)?如果是这种情况,对象的大小是否有限制?或者1000是否意味着,我有1000mb(MB正确吗?)可以使用,并且在它开始踢出LRU之前,我可以在缓存中拥有尽可能多的对象,最多1000mb?

java - 通过 Java 中的键聚合文件中的键值行

我有一个巨大的文件,由约8亿行(60g)组成。行可以是重复的,由一个id和一个值组成。例如:id1valueAid1valueBid2valueAid3valueCid3valueAid3valueC注意:ID没有像示例中那样按顺序(和分组)。我想通过键聚合行,以这种方式:id1valueA,valueBid2valueAid3valueC,valueA有5000个可能的值。该文件不适合内存,所以我不能使用简单的Java集合。此外,大部分行都是单一的(例如id2),它们应该直接写在输出文件中。出于这个原因,我的第一个解决方案是对文件进行两次迭代:在第一次迭代中,我存储了两个结构,只有I

java - Guava 的 Cache<K, Semaphore> 和 weakValues() 是线程安全的吗?

我需要一个按键锁定机制来保护按键绑定(bind)的关键部分。尽管ConcurrentMap对于并发就足够了,我也不希望map累积旧key并无限增长。理想情况下,数据结构最终(或之后立即)释放用于未使用锁的键的内存。我有点想Guava的Cache用weakValues()build会成功的:privatestaticfinalLoadingCacheKEY_MUTEX=CacheBuilder.newBuilder().weakValues().build(newCacheLoader(){@OverridepublicSemaphoreload(Kkey)throwsException

java - 具有弱键的并发映射

我有一个高度并发的应用程序,它使用文件系统上的资源。两个线程同时访问同一资源的可能性很小,但如果发生这种情况,应用程序可能会显示有线行为。每个资源都可以通过String坐标vector进行映射(绑定(bind)在ResourceIdentifier类中)。在我当前的解决方案中,我创建了此类资源标识符的ConcurrentMap以收集线程在访问资源时使用的监视器:(ResourceIdentifier覆盖equals和hashCode正确。)ConcurrentMapconcurrentMap=newConcurrentHashMap();publicObjectaquireMonito

java - 有没有办法为 Guava 表使用 for-each 结构?

现代Collections最简洁的编码优势之一是能够使用for-each结构。我在下面有一个简单的通用表格打印方法,然后是测试加载方法。虽然这行得通,但某种形式的for-each会干净得多。有什么想法吗?publicvoidprintTable(Tabletable){intnumRows=table.rowKeySet().size();intnumCols=table.columnKeySet().size();for(inti=0;itable=HashBasedTable.create();voidmakeTable(){for(inti=0;i 最

java - Guava future 如何上链?

我正在尝试创建一个小型服务来接受文件上传、解压缩然后删除上传的文件。这三个步骤应该作为future链接起来。我正在使用GoogleGuava库。工作流程是:Afuture下载文件,如果操作完成,则afuture解压文件。如果解压缩完成,将来会删除原始上传的文件。但老实说,我不清楚我将如何链接future,甚至如何以Guava的方式创建它们。文档简明扼要且不清楚。好的,有transform方法,但根本没有具体示例。chain方法已弃用。我想念RxJava库。 最佳答案 Futures.transform不像RxJava那样可以流畅地链

java - Guava:MemoizingSupplier 线程安全

GuavaSuppliers类包含MemoizingSupplier:staticclassMemoizingSupplierimplementsSupplier,Serializable{finalSupplierdelegate;transientvolatilebooleaninitialized;//"value"doesnotneedtobevolatile;visibilitypiggy-backs//onvolatilereadof"initialized".transientTvalue;MemoizingSupplier(Supplierdelegate){this.

java - Guava MapMaker().weakKeys().makeMap() 与 WeakHashMap

我们有一个Scala服务器,它通过套接字使用ProtocolBuffers获取节点树,我们需要将额外的数据附加到每个节点。在单线程上下文中,当节点树和关联数据将同时删除它们的强引用时(由于超出范围),是否有任何理由将GoogleGuava的MapMaker与weakKeys()一起使用过度使用Wea​​kHashMap?似乎使用MapMaker,需要为同步访问付费,在这种情况下不需要。顺便说一句,如果MapMaker允许访问等价设置,那么人们可以选择引用相等而不关心弱引用或软引用,这将很有用。 最佳答案 WeakHashMap的一个

java - 将泛型与实现相同接口(interface)的枚举类集合一起使用

我正在尝试做reverselookup在几个实现相同Field的枚举类上通过遍历Class的列表来实现界面es使用Guava的Maps.uniqueIndex:FieldvalueOfSearchName=null;for(finalClass>clazz:ImmutableList.of(EntityField.class,AddressField.class,PersonFunctionType.class)){valueOfSearchName=Fields.valueOfSearchName(clazz,term.field());//errorif(valueOfSearch