.class public final Lio/reactivex/internal/schedulers/SchedulerPoolFactory; .super Ljava/lang/Object; .source "SchedulerPoolFactory.java" # static fields .field static final POOLS:Ljava/util/Map; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/Map<", "Ljava/util/concurrent/ScheduledThreadPoolExecutor;", "Ljava/lang/Object;", ">;" } .end annotation .end field .field public static final PURGE_ENABLED:Z .field static final PURGE_ENABLED_KEY:Ljava/lang/String; = "rx2.purge-enabled" .field public static final PURGE_PERIOD_SECONDS:I .field static final PURGE_PERIOD_SECONDS_KEY:Ljava/lang/String; = "rx2.purge-period-seconds" .field static final PURGE_THREAD:Ljava/util/concurrent/atomic/AtomicReference; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/concurrent/atomic/AtomicReference<", "Ljava/util/concurrent/ScheduledExecutorService;", ">;" } .end annotation .end field # direct methods .method static constructor ()V .locals 4 .line 48 new-instance v0, Ljava/util/concurrent/atomic/AtomicReference; invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicReference;->()V sput-object v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_THREAD:Ljava/util/concurrent/atomic/AtomicReference; .line 53 new-instance v0, Ljava/util/concurrent/ConcurrentHashMap; invoke-direct {v0}, Ljava/util/concurrent/ConcurrentHashMap;->()V sput-object v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->POOLS:Ljava/util/Map; .line 105 invoke-static {}, Ljava/lang/System;->getProperties()Ljava/util/Properties; move-result-object v0 const-string v1, "rx2.purge-enabled" .line 107 invoke-virtual {v0, v1}, Ljava/util/Properties;->containsKey(Ljava/lang/Object;)Z move-result v2 const/4 v3, 0x1 if-eqz v2, :cond_0 .line 108 invoke-static {v1}, Ljava/lang/Boolean;->getBoolean(Ljava/lang/String;)Z move-result v1 if-eqz v1, :cond_1 const-string v2, "rx2.purge-period-seconds" .line 110 invoke-virtual {v0, v2}, Ljava/util/Properties;->containsKey(Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_1 .line 111 invoke-static {v2, v3}, Ljava/lang/Integer;->getInteger(Ljava/lang/String;I)Ljava/lang/Integer; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I move-result v3 goto :goto_0 :cond_0 const/4 v1, 0x1 .line 115 :cond_1 :goto_0 sput-boolean v1, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_ENABLED:Z .line 116 sput v3, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_PERIOD_SECONDS:I .line 118 invoke-static {}, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->start()V return-void .end method .method private constructor ()V .locals 2 .line 30 invoke-direct {p0}, Ljava/lang/Object;->()V .line 31 new-instance v0, Ljava/lang/IllegalStateException; const-string v1, "No instances!" invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V throw v0 .end method .method public static create(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService; .locals 2 const/4 v0, 0x1 .line 127 invoke-static {v0, p0}, Ljava/util/concurrent/Executors;->newScheduledThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService; move-result-object p0 .line 128 instance-of v0, p0, Ljava/util/concurrent/ScheduledThreadPoolExecutor; if-eqz v0, :cond_0 .line 129 move-object v0, p0 check-cast v0, Ljava/util/concurrent/ScheduledThreadPoolExecutor; .line 130 sget-object v1, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->POOLS:Ljava/util/Map; invoke-interface {v1, v0, p0}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; :cond_0 return-object p0 .end method .method public static shutdown()V .locals 1 .line 97 sget-object v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_THREAD:Ljava/util/concurrent/atomic/AtomicReference; invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object; move-result-object v0 check-cast v0, Ljava/util/concurrent/ScheduledExecutorService; invoke-interface {v0}, Ljava/util/concurrent/ScheduledExecutorService;->shutdownNow()Ljava/util/List; .line 98 sget-object v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->POOLS:Ljava/util/Map; invoke-interface {v0}, Ljava/util/Map;->clear()V return-void .end method .method public static start()V .locals 11 .line 61 :goto_0 sget-object v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_THREAD:Ljava/util/concurrent/atomic/AtomicReference; invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object; move-result-object v0 check-cast v0, Ljava/util/concurrent/ScheduledExecutorService; if-eqz v0, :cond_0 .line 62 invoke-interface {v0}, Ljava/util/concurrent/ScheduledExecutorService;->isShutdown()Z move-result v1 if-nez v1, :cond_0 return-void :cond_0 const/4 v1, 0x1 .line 65 new-instance v2, Lio/reactivex/internal/schedulers/RxThreadFactory; const-string v3, "RxSchedulerPurge" invoke-direct {v2, v3}, Lio/reactivex/internal/schedulers/RxThreadFactory;->(Ljava/lang/String;)V invoke-static {v1, v2}, Ljava/util/concurrent/Executors;->newScheduledThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService; move-result-object v4 .line 66 sget-object v1, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_THREAD:Ljava/util/concurrent/atomic/AtomicReference; invoke-virtual {v1, v0, v4}, Ljava/util/concurrent/atomic/AtomicReference;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_1 .line 68 new-instance v5, Lio/reactivex/internal/schedulers/SchedulerPoolFactory$1; invoke-direct {v5}, Lio/reactivex/internal/schedulers/SchedulerPoolFactory$1;->()V sget v0, Lio/reactivex/internal/schedulers/SchedulerPoolFactory;->PURGE_PERIOD_SECONDS:I int-to-long v6, v0 int-to-long v8, v0 sget-object v10, Ljava/util/concurrent/TimeUnit;->SECONDS:Ljava/util/concurrent/TimeUnit; invoke-interface/range {v4 .. v10}, Ljava/util/concurrent/ScheduledExecutorService;->scheduleAtFixedRate(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture; return-void .line 88 :cond_1 invoke-interface {v4}, Ljava/util/concurrent/ScheduledExecutorService;->shutdownNow()Ljava/util/List; goto :goto_0 .end method