1818
1919package com .backendless ;
2020
21- import java .util .concurrent .ExecutorService ;
22- import java .util .concurrent .Executors ;
2321import java .util .concurrent .LinkedBlockingQueue ;
22+ import java .util .concurrent .ScheduledThreadPoolExecutor ;
2423import java .util .concurrent .ThreadFactory ;
2524import java .util .concurrent .ThreadPoolExecutor ;
2625import java .util .concurrent .TimeUnit ;
2928
3029public class ThreadPoolService
3130{
32- private final static ExecutorService threadPoolExecutor ;
31+ private final static SimpleThreadFactory THREAD_FACTORY ;
32+ private final static ThreadPoolExecutor THREAD_POOL_EXECUTOR ;
33+ private final static ScheduledThreadPoolExecutor SCHEDULED_THREAD_POOL_EXECUTOR ;
3334 private final static int MAX_THREAD_POOL_SIZE = 10 ;
3435
3536 static
3637 {
3738 if (Backendless .isCodeRunner ())
38- threadPoolExecutor = new ThreadPoolExecutor (0 , MAX_THREAD_POOL_SIZE , 2 , TimeUnit .SECONDS ,
39+ {
40+ THREAD_FACTORY = new SimpleThreadFactory ("BackendlessSDK_CR" );
41+ THREAD_POOL_EXECUTOR = new ThreadPoolExecutor (0 , MAX_THREAD_POOL_SIZE , 2 , TimeUnit .SECONDS ,
3942 new LinkedBlockingQueue <Runnable >(),
40- new SimpleThreadFactory ("BackendlessSDK_CR" ));
43+ THREAD_FACTORY );
44+
45+ SCHEDULED_THREAD_POOL_EXECUTOR = null ;
46+ }
4147 else
42- threadPoolExecutor = new ThreadPoolExecutor (2 , MAX_THREAD_POOL_SIZE , 60 , TimeUnit .SECONDS ,
43- new LinkedBlockingQueue <Runnable >(),
44- new SimpleThreadFactory ("BackendlessSDK" ));
48+ {
49+ THREAD_FACTORY = new SimpleThreadFactory ("BackendlessSDK" );
50+ THREAD_POOL_EXECUTOR = new ThreadPoolExecutor (2 , MAX_THREAD_POOL_SIZE , 60 , TimeUnit .SECONDS ,
51+ new LinkedBlockingQueue <Runnable >(),
52+ THREAD_FACTORY );
4553
54+ SCHEDULED_THREAD_POOL_EXECUTOR = new ScheduledThreadPoolExecutor (2 , THREAD_FACTORY );
55+ }
4656 }
4757
48- public static ExecutorService getPoolExecutor ()
58+ public static ThreadPoolExecutor getThreadPoolExecutor ()
4959 {
50- return threadPoolExecutor ;
60+ return THREAD_POOL_EXECUTOR ;
5161 }
5262
63+ public static ScheduledThreadPoolExecutor getScheduledThreadPoolExecutor ()
64+ {
65+ return SCHEDULED_THREAD_POOL_EXECUTOR ;
66+ }
67+
68+
5369 private static class SimpleThreadFactory implements ThreadFactory
5470 {
55- private final ThreadFactory threadFactory = Executors .defaultThreadFactory ();
71+ private final static ThreadGroup THREAD_GROUP = new ThreadGroup ( "BackendlessSDK_ThreadGroup" );
72+
5673 private final String threadNamePrefix ;
5774 private final boolean isDaemon = true ;
5875 private final AtomicInteger threadNumber = new AtomicInteger ();
@@ -63,10 +80,9 @@ public SimpleThreadFactory( String poolName )
6380 }
6481
6582 @ Override
66- public Thread newThread ( Runnable r )
83+ public Thread newThread ( Runnable runnable )
6784 {
68- Thread t = threadFactory .newThread ( r );
69- t .setName ( threadNamePrefix + threadNumber .getAndIncrement () );
85+ Thread t = new Thread ( THREAD_GROUP , runnable , threadNamePrefix + threadNumber .getAndIncrement () );
7086 t .setDaemon ( isDaemon );
7187 return t ;
7288 }
0 commit comments