2011-10-25 14 views
5

Câu hỏi nói rằng tất cả tôi đều muốn sử dụng CacheBuilder, nhưng giá trị của tôi được kéo vào không đồng bộ. Điều này làm việc trước đây với MapMaker như CacheLoader không phải là một yêu cầu. Bây giờ tôi muốn biết nếu tôi có thể hack này lên hoặc nếu có bất kỳ lựa chọn thay thế không được chấp nhận. Cảm ơn bạn.Làm cách nào để một người nào đó sử dụng CacheLoader của Guava một cách không đồng bộ

+2

Câu hỏi thực sự không nói lên tất cả. Bạn có thể giải thích rõ ràng hơn những gì bạn đang làm và tại sao Cache không hoạt động cho bạn? – ColinD

+1

Tôi đoán rằng bạn đang sử dụng 'MapMaker' để tạo một' ConcurrentMap' phi tính toán, sau đó bạn sẽ điền thông qua 'map.put'. Trong Guava 10.0.1, bạn có thể làm điều này với một 'Cache' bằng cách sử dụng' cache.asMap(). Put' – Ray

+0

@ColinD: Vấn đề ở đây là tôi cần phải kéo một tập hợp dữ liệu một cách không đồng bộ như một lỗ trước khi có thể thiết lập bộ nhớ cache, máy tính yêu cầu bộ lỗ, tôi không thể sử dụng bộ nhớ cache theo yêu cầu như thế này. –

Trả lời

5

Tôi nghĩ câu hỏi bạn đang cố hỏi là "Làm cách nào để sử dụng CacheBuilder mà không phải chỉ định CacheLoader?" Nếu đó là trường hợp, sau đó sẽ có hỗ trợ cho điều này trong phiên bản Guava 11.0. Trong khi chờ đợi một phương pháp xây dựng() trên CacheLoader đã được kiểm tra vào thân cây (tính đến sáng nay):

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheBuilder.html

+0

Có, cụ thể trong quy trình mà dữ liệu được truy xuất không đồng bộ mà tôi vẫn cho là trường hợp sử dụng hợp lệ. Cảm ơn bạn đã nhập. –

+0

Ồ, nếu những gì bạn muốn là một CacheLoader không đồng bộ, thì đó là điều chúng tôi đang nói đến, nhưng nó sẽ không xảy ra bất cứ lúc nào sớm ... – fry

1

Một phương pháp sẽ được thực hiện với các thông số chung K và V như kết quả đầu ra mong muốn của bạn:

LoadingCache<K, ListenableFuture<V>> values = CacheBuilder.newBuilder() 
    .build(
     new CacheLoader<K, ListenableFuture<V>>() { 
     public ListenableFuture<V> load(K key) { 
      /* Get your future */ 
     } 
     }); 
Các vấn đề liên quan