endian11
2020-08-13 a927c72c0f06ef5bd771e5ae00bc35155c271762
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package com.anyun.im_lib;
 
import android.util.Log;
 
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
/**
 * MyApplication2
 * Created by lzw on 2019/12/2. 14:15:59
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class ExecutorServiceFactory {
 
    private static final String TAG = ExecutorServiceFactory.class.getSimpleName();
 
    /*** 管理线程组,负责重连***/
    private ExecutorService bossPool;
    /*** 工作线程组,负责心跳***/
    private ExecutorService workPool;
 
    /**
     * 初始化Boss线程池
     */
    public synchronized void initBossLoopGroup(){
        initBossLoopGroup(1);
    }
 
    /**
     * 初始化work线程池
     */
    public synchronized void initWorkLoopGroup(){
        initWorkLoopGroup(1);
    }
 
    /**
     * 执行Boss任务
     * @param runnable
     */
    public void  execBossTask(Runnable runnable){
        if (bossPool == null){
            initBossLoopGroup();
        }
        Log.i(TAG, "execBossTask");
        bossPool.execute(runnable);
    }
    /**
     * 执行work任务
     * @param runnable
     */
    public void  execWorkTask(Runnable runnable){
        if (workPool == null){
            initWorkLoopGroup();
        }
        workPool.execute(runnable);
    }
 
    private void initWorkLoopGroup(int size) {
        destroyWorkLoopGroup();
        workPool = Executors.newFixedThreadPool(size);
    }
 
    private void initBossLoopGroup(int size) {
        destroyBossLoopGroup();
        bossPool = Executors.newFixedThreadPool(size);
    }
 
    /**
     * 释放boss线程池
     */
    private void destroyBossLoopGroup() {
        if (bossPool != null){
            try {
                bossPool.shutdownNow();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                bossPool = null;
            }
        }
    }
 /**
     * 释放work线程池
     */
 public void destroyWorkLoopGroup() {
        if (workPool != null){
            try {
                workPool.shutdownNow();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                workPool = null;
            }
        }
    }
 
    /**
     * 释放所有线程
     */
    public void destroy() {
        destroyBossLoopGroup();
        destroyWorkLoopGroup();
    }
}