18
18
19
19
package com .backendless ;
20
20
21
- import java .util .concurrent .ExecutorService ;
22
- import java .util .concurrent .Executors ;
23
21
import java .util .concurrent .LinkedBlockingQueue ;
22
+ import java .util .concurrent .ScheduledThreadPoolExecutor ;
24
23
import java .util .concurrent .ThreadFactory ;
25
24
import java .util .concurrent .ThreadPoolExecutor ;
26
25
import java .util .concurrent .TimeUnit ;
29
28
30
29
public class ThreadPoolService
31
30
{
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 ;
33
34
private final static int MAX_THREAD_POOL_SIZE = 10 ;
34
35
35
36
static
36
37
{
37
38
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 ,
39
42
new LinkedBlockingQueue <Runnable >(),
40
- new SimpleThreadFactory ("BackendlessSDK_CR" ));
43
+ THREAD_FACTORY );
44
+
45
+ SCHEDULED_THREAD_POOL_EXECUTOR = null ;
46
+ }
41
47
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 );
45
53
54
+ SCHEDULED_THREAD_POOL_EXECUTOR = new ScheduledThreadPoolExecutor (2 , THREAD_FACTORY );
55
+ }
46
56
}
47
57
48
- public static ExecutorService getPoolExecutor ()
58
+ public static ThreadPoolExecutor getThreadPoolExecutor ()
49
59
{
50
- return threadPoolExecutor ;
60
+ return THREAD_POOL_EXECUTOR ;
51
61
}
52
62
63
+ public static ScheduledThreadPoolExecutor getScheduledThreadPoolExecutor ()
64
+ {
65
+ return SCHEDULED_THREAD_POOL_EXECUTOR ;
66
+ }
67
+
68
+
53
69
private static class SimpleThreadFactory implements ThreadFactory
54
70
{
55
- private final ThreadFactory threadFactory = Executors .defaultThreadFactory ();
71
+ private final static ThreadGroup THREAD_GROUP = new ThreadGroup ( "BackendlessSDK_ThreadGroup" );
72
+
56
73
private final String threadNamePrefix ;
57
74
private final boolean isDaemon = true ;
58
75
private final AtomicInteger threadNumber = new AtomicInteger ();
@@ -63,10 +80,9 @@ public SimpleThreadFactory( String poolName )
63
80
}
64
81
65
82
@ Override
66
- public Thread newThread ( Runnable r )
83
+ public Thread newThread ( Runnable runnable )
67
84
{
68
- Thread t = threadFactory .newThread ( r );
69
- t .setName ( threadNamePrefix + threadNumber .getAndIncrement () );
85
+ Thread t = new Thread ( THREAD_GROUP , runnable , threadNamePrefix + threadNumber .getAndIncrement () );
70
86
t .setDaemon ( isDaemon );
71
87
return t ;
72
88
}
0 commit comments