iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android中创建多线程管理器实例
  • 872
分享到

Android中创建多线程管理器实例

多线程线程Android 2022-06-06 10:06:46 872人浏览 八月长安
摘要

如果你要反复执行一个任务,用不同的数据集(参数不同),但一次只要一个执行(任务是单线程的),IntentService符合你的需求。当需要在资源可用时自动执行任务,或允许多任务

如果你要反复执行一个任务,用不同的数据集(参数不同),但一次只要一个执行(任务是单线程的),IntentService符合你的需求。当需要在资源可用时自动执行任务,或允许多任务同时执行,你需要一个线程管理器管理你的线程。ThreadPoolExecutor,会维护一个队列,当它的线程池有空时,从队列里取任务,并执行。要运行任务,你要做的就是把它加到队列里。

线程池可以并联运行一个任务的多个实例,所以你要保存代码线程安全。能被多线程访问的变量需要同步块.更多信息,见Processes and Threads(Http://developer.Android.com/guide/components/processes-and-threads.html)

定义线程池类

在它自己类中实例ThreadPoolExecutor.在类里,如下操作:
为线程池使用static变量

你可能在app里只需要一个单例的线程池,这是为了统一控制限制CPU或网络资源。如果你有不同的Runnable类型,你可能想要每种类型都有各自的线程池,但这些都可以放到一个单一的实例里。比如,你可以把它声明成全局变量:
代码如下:
public class PhotoManager {
    ...
    static  {
        ...
        // Creates a single static instance of PhotoManager
        sInstance = new PhotoManager();
    }
    ...

使用private构造方法

把构造方法声明成private,可以确保单例,这意味着你不需要在同步代码块里封装类访问。
代码如下:
 public class PhotoManager {
        ...
       
        private PhotoManager() {
            ...
        }

调用线程池类里的方法来开始任务

线程池类里定义一个方法,用来添加任务到线程池队列,如:
代码如下:
public class PhotoManager {
    ...
    // 供PhotoView调用获取图片
    static public PhotoTask startDownload(
        PhotoView imageView,
        boolean cacheFlag) {
        ...
        // 添加一个任务到线程池
        sInstance.
                mDownloadThreadPool.
                execute(downloadTask.getHTTPDownloadRunnable());
        ...
    }

实例化一个UI线程的Handler.

Handler用于与UI线程通讯,大多数UI控件只允许在UI线程修改。
代码如下:
private PhotoManager() {
    ...
        // Defines a Handler object that's attached to the UI thread
        mHandler = new Handler(Looper.getMainLooper()) {
           
            @Override
            public void handleMessage(Message inputMessage) {
                ...
            }
        ...
        }
    }

判断线程池参数

一旦你有了全部类结构,你就可以开始定义线程池。实例化一个线程池对象,你需要下面的值:
初始池大小,最大池大小。
线程池的线程数量主要依赖于设备的CPU核心数.可以从系统环境中获取。

代码如下:
public class PhotoManager {
...
   
    private static int NUMBER_OF_CORES =
            Runtime.getRuntime().availableProcessors();
}

这个数字可能不能反映出设备的物理cpu内核数量;某些设备CPU会根据系统负载自动禁用部分内核,对于这些设备,availableProcessors()返回的是当前活跃的内核数量。

保持活跃时间和时间单位
一个进程在关闭前,保持空闲状态的时间(可以复用进程)。时间单位在TimeUnit里

任务队列

ThreadPoolExecutor的列队保存Runnable对象。在线程中执行代码,线程池管理器会从一个FIFO队列里取出一个Runnable对象,附加到线程里。队列实现BlockingQueue接口,在创建线程池时提供。你可以从现有实现中选一个,适应你的需求,参见ThreadPoolExecutor。下面是使用LinkedBlockingQueue的例子:
代码如下:
public class PhotoManager {
    ...
    private PhotoManager() {
        ...
        // A queue of Runnables
        private final BlockingQueue<Runnable> mDecodeWorkQueue;
        ...
        // Instantiates the queue of Runnables as a LinkedBlockingQueue
        mDecodeWorkQueue = new LinkedBlockingQueue<Runnable>();
        ...
    }
    ...
}

创建线程池

调用ThreadPoolExecutor()方法初始化线程池。它会创建管理线程。因为线程池的初始大小和最大池大小是一样的,ThreadPoolExecutor在初始化时就创建了所有线程对象,如:

代码如下:    private PhotoManager() {
        ...
        // Sets the amount of time an idle thread waits before terminating
        private static final int KEEP_ALIVE_TIME = 1;
        // Sets the Time Unit to seconds
        private static final TimeUnit KEEP_ALIVE_TIME_UNIT = TimeUnit.SECONDS;
        // Creates a thread pool manager
        mDecodeThreadPool = new ThreadPoolExecutor(
                NUMBER_OF_CORES,       // Initial pool size
                NUMBER_OF_CORES,       // Max pool size
                KEEP_ALIVE_TIME,
                KEEP_ALIVE_TIME_UNIT,
                mDecodeWorkQueue);
    }

您可能感兴趣的文章:android简易文件管理器实例(列表式文件目录)android文件管理器用法详解Android开发之简单文件管理器实现方法Android编程实现任务管理器的方法浅析Android文件管理器(项目一)Android使用SmsManager实现短信发送功能android短信管理器SmsManager实例详解


--结束END--

本文标题: Android中创建多线程管理器实例

本文链接: https://www.lsjlt.com/news/27039.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android怎么创建多线程并管理
    在Android中,可以通过以下方式创建和管理多线程:1. 使用Thread类创建线程:可以创建一个继承自Thread类的子类,并重...
    99+
    2023-09-14
    Android
  • Qt5.9继承QObject创建多线程实例
    本博客主要总结Qt中创建多线程的另一种方法,不是通过继承类QThread,而是通过继承对象QObject,来实现多线程。(可以直接跳过下面内容,看1.1内容) 利用继承QObject...
    99+
    2024-04-02
  • C++线程怎么创建和管理
    C++中创建和管理线程的主要方式是使用std::thread类。以下是创建和管理线程的基本步骤: 包含头文件:首先需要包含头文件...
    99+
    2023-10-26
    C++
  • Java创建多线程局域网聊天室实例
    局域网聊天室 在学习了一个学期的java以后,觉得java真是博大精深,彻底放弃了因为c++而轻视java的心态,搞了一个多线程的聊天室,熟悉了一下服务器和客户机的操作。 1.TCP...
    99+
    2024-04-02
  • ​linux中怎么创建多线程
    这篇文章主要介绍了linux中怎么创建多线程的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇linux中怎么创建多线程文章都会有所收获,下面我们一起来看看吧。linux线程分为两...
    99+
    2024-04-02
  • Python中如何创建多线程?
    目录一、python线程的模块1.thread和threading模块2. Queue模块3.注意模块的选择二、Threading模块三、通过Threading.Thread类来创建...
    99+
    2023-01-06
    python 创建多线程 Python多线程编程 python多线程开发
  • 如何在python中创建多线程
    今天就跟大家聊聊有关如何在python中创建多线程,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几...
    99+
    2023-06-14
  • Java中怎么创建多个线程
    这篇文章给大家介绍Java中怎么创建多个线程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java多线程代码如下package com.vista;  class MyThrea...
    99+
    2023-06-17
  • Java创建多线程服务器流程
    目录为每个客户分配一个线程创建线程池使用 Java 提供的线程池使用线程池的注意事项一个典型的单线程服务器示例如下: while (true) { Socket socket...
    99+
    2023-05-18
    Java多线程服务器 Java服务器
  • phpStudy V8中创建与管理站点的实例
    小编给大家分享一下phpStudy V8中创建与管理站点的实例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 站点的创建选择[网站], 点击左上角的[创建网站...
    99+
    2023-06-07
  • 多线程编程中的线程管理策略
    线程管理策略 线程管理策略可以分为两类: 1. 用户级线程管理 协作式线程管理:线程自愿交出控制权,允许其他线程执行。依赖于线程的合作,可能会导致死锁。 抢占式线程管理:操作系统负责调度线程,强制执行时间片,防止死锁。 2. 内核级线...
    99+
    2024-04-02
  • Android中创建子线程的方式详解
    在 Android 中,创建子线程的方式通常有以下几种: 使用 Thread 类进行创建 Thread 是 Java 中的一个类,可以通过继承 Thread 类或者创建 Thread...
    99+
    2023-05-18
    Android创建子线程方式 Android创建子线程 Android子线程
  • C++ 中如何创建和管理线程?有哪些线程同步机制?
    c++++ 中的线程线程是轻量级的执行单元,可实现并发编程。使用 std::thread 类创建线程,并通过互斥锁、条件变量和自旋锁等同步机制维护共享数据的一致性。实战案例展示了使用线程...
    99+
    2024-05-07
    线程 同步机制 c++
  • Java多线程中线程的两种创建方式及比较代码示例
    线程的概念:线程(thread)是指一个任务从头至尾的执行流,线程提供一个运行任务的机制,对于java而言,一个程序中可以并发的执行多个线程,这些线程可以在多处理器系统上同时运行。当程序作为一个应用程序运行时,java解释器为main()方...
    99+
    2023-05-30
    java 多线程 创建
  • redis多队列管理器怎么创建
    要创建一个Redis多队列管理器,你可以按照以下步骤进行操作:1. 首先,你需要安装并配置Redis。你可以从Redis官方网站下载...
    99+
    2023-09-04
    redis
  • C++11中thread多线程编程如何创建
    这篇文章主要为大家展示了“C++11中thread多线程编程如何创建”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++11中thread多线程编程如何创建”这篇文章吧。1 线程创建与结束C++...
    99+
    2023-06-21
  • Java中怎么实现多线程事务管理
    Java中怎么实现多线程事务管理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、继承Thread类第一种方法是继承Thread类,重写run()方法public ...
    99+
    2023-06-20
  • Java如何创建多线程的服务器
    这篇“Java如何创建多线程的服务器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java如何创建多线程的服务器”文章吧。回...
    99+
    2023-06-03
  • 如何在使用golang创建的wasm中实现多线程?
    积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《如何在使用golang创建的was...
    99+
    2024-04-05
  • Java多线程事务管理的实现
    目录实现多线程的三种方式一、继承Thread类二、实现Runnable接口三、实现Callable和Future接口多线程单条数据事务管理今天要讨论的是“Java实现多线程单条数据事...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作