android 线程的优先级,Android 在线程池中实现线程优先级的代码实现

Android 在线程池中实现线程优先级的代码实现

在前文《Android 中设置线程优先级的正确方式(2种方法)》中,我们知道,设置线程优先级,最好使用 Android 推荐的 android.os.Process 类的 setThreadPriority 方法。该方法需要在需要在线程执行时调用,也就是需要在 run 方法里面调用。

单个线程执行时,非常简单,那如果我们需要在线程池里设置现场优先级,又如何操作呢?

这里我直接给出了一个模板示例,按照自己的需要修改参数即可:

package com.budaye.simpledemo;

import android.os.Handler;

import android.os.Looper;

import android.os.Message;

import android.os.Process;

import java.util.concurrent.ArrayBlockingQueue;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.ThreadFactory;

import java.util.concurrent.ThreadPoolExecutor;

import java.util.concurrent.TimeUnit;

import java.util.concurrent.atomic.AtomicInteger;

/**

* 异步线程池

*

* @author bu

*/

public class AsyncThreadTask { private final int CPU_COUNT = Runtime.getRuntime().availableProcessors(); //cup内核数 private final int DEAFULT_THREAD_COUNT = CPU_COUNT + 3; //默认核心线程数 private final int KEEP_ALIVE = 3; //空线程alive时间 private ExecutorService mThreadPool; //线程池 private ThreadFactory mBackgroundThreadFactory = new PriorityThreadFactory(Process.THREAD_PRIORITY_BACKGROUND); private InternalHandler mHandler; private static AsyncThreadTask instance; public static AsyncThreadTask getInstance() { if (instance == null) { synchronized (AsyncThreadTask.class) { if (instance == null) { instance = new AsyncThreadTask(); } } } return instance; } /** * 构造函数 */ private AsyncThreadTask() { // 创建线程池 mThreadPool = new ThreadPoolExecutor(DEAFULT_THREAD_COUNT, DEAFULT_THREAD_COUNT, KEEP_ALIVE, TimeUnit.SECONDS, new ArrayBlockingQueue(10000), mBackgroundThreadFactory, new ThreadPoolExecutor.DiscardOldestPolicy()); } /** * 异步线程执行任务 * * @param runnable */ public static void execute(Runnable runnable) { AsyncThreadTask.getInstance().executeRunnable(runnable); } /** * 异步线程执行延迟任务 * * @param runnable * @param delayedTime */ public static void executeDelayed(Runnable runnable, long delayedTime) { AsyncThreadTask.getInstance().executeRunnableDelayed(runnable, delayedTime); } public static void executeDelayedToUI(Runnable runnable, long delayedTime) { AsyncThreadTask.getInstance().executeRunnableDelayedToUI(runnable, delayedTime); } private void executeRunnableDelayedToUI(final Runnable runnable, long delayedTime) { getHandler().postDelayed(runnable, delayedTime); } private void executeRunnable(Runnable runnable) { mThreadPool.execute(runnable); } private void executeRunnableDelayed(final Runnable runnable, long delayedTime) { getHandler().postDelayed(new Runnable() { @Override public void run() { mThreadPool.execute(runnable); } }, delayedTime); } private Handler getHandler() { synchronized (this) { if (mHandler == null) { mHandler = new InternalHandler(); } return mHandler; } } private static class InternalHandler extends Handler { public InternalHandler() { super(Looper.getMainLooper()); } @Override public void handleMessage(Message msg) { } } public class PriorityThreadFactory implements ThreadFactory { private final AtomicInteger mCount = new AtomicInteger(1); private final int mThreadPriority; public PriorityThreadFactory(int threadPriority) { mThreadPriority = threadPriority; } @Override public Thread newThread(final Runnable runnable) { Runnable riorityRunnable = new Runnable() { @Override public void run() { Process.setThreadPriority(mThreadPriority); runnable.run(); } }; return new Thread(riorityRunnable, "AsyncThreadTask #" + mCount.getAndIncrement()); } }

}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

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

**PS:更多精彩内容,请查看 --> 《Android 开发》

**PS:更多精彩内容,请查看 --> 《Android 开发》

**PS:更多精彩内容,请查看 --> 《Android 开发》

文章来源: blog.csdn.net,作者:卜大爷,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/u011578734/article/details/110524802

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值