2017-03-15 1 views
0

개체가 구아바 캐시에서 제거 될 때 약간의 정리 작업을 수행하려고합니다. 하지만 시간이 지나면해야합니다. 잠을 잘 수 있습니까? 모든 스레드를 차단합니까? 또는 removalListener가 별도의 스레드에서 실행됩니까? Removal Listeners · CachesExplained · google/guava Wiki에서guava 캐시의 removalListener가 별도의 스레드에서 실행됩니까?

CacheBuilder.newBuilder(). 
.removalListener(notification -> { 
    try { 
     Thread.sleep(10 * 60 * 1000); 
    } catch (InterruptedException e) { 
    } 
    try { 
     //close 
    } catch (final IOException e) { 
    } 
}) 
.build(); 

답변

3

:

경고 : 제거 리스너 작업은 기본적으로 비동기 적으로 실행되며, 캐시 유지 보수는 일반적으로 정상적인 캐시 작업 동안 수행되기 때문에, 고가의 제거 청취자가 정상 캐시 기능을 늦출 수 ! 값 비싼 제거 수신기가있는 경우 RemovalListeners.asynchronous(RemovalListener, Executor)을 사용하여 RemovalListener을 비동기 적으로 작동하도록 꾸미십시오.

Executor executor = Executors.newFixedThreadPool(10); 
CacheBuilder.newBuilder() 
     .removalListener(RemovalListeners.asynchronous(notification -> { 
      Uninterruptibles.sleepUninterruptibly(10, TimeUnit.MINUTES); 
      try { 
       //close 
      } catch (final IOException e) { 
      } 
     }, executor)) 
     .build(); 
관련 문제