首页 > 其他分享 >安卓中实现异步任务(4)——使用线程池实现

安卓中实现异步任务(4)——使用线程池实现

时间:2022-10-22 22:34:27浏览次数:50  
标签:异步 Thread currentThread util 线程 安卓中 import android

安卓中实现异步任务(4)——使用线程池实现

问题背景

上篇文章大致介绍了几种安卓汇总实现异步任务的方法,讲得比较简要,有朋友问到具体的实现方式,现在开始分列几篇文章详细介绍这几种异步的具体实现。这篇讲得是基于线程池实现,持续更新。

实现demo

(1)实现我们的线程池

import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ThreadPoolUtil {
    private static int fixNum = 6;
    private static int maxNum = 8;

    private static ExecutorService fixedThreadPool = new ThreadPoolExecutor(fixNum, maxNum,
            0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());;

    public static void executeRunnableByFixedPool(Runnable runnable) {
        fixedThreadPool.execute(runnable);
    }

}

(2)新建我们的activity,对应layout布局如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activity.HandlerThreadActivity">
    <Button
        android:id="@+id/btn1"
        android:text="启动子线程"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</androidx.constraintlayout.widget.ConstraintLayout>

(2)对应我们activity的代码如下:

import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;

import com.alibaba.android.arouter.facade.annotation.Route;

public class HandlerThreadActivity extends AbstractSubActivity {
    private static final String TAG = "HandlerThreadActivity";
    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_thread);

        button = findViewById(R.id.btn1);

        Thread.currentThread().setName("主线程");
        Log.d(TAG, "主线程当前线程名为" + Thread.currentThread().getId()
                + " " + Thread.currentThread().getName());

        HandlerThread handlerThread = new HandlerThread("子线程");
        handlerThread.start();
        Handler handler = new Handler(handlerThread.getLooper(), msg -> {
            if (msg.what == 1) {
                Log.d(TAG, "handlerThread当前线程名为:" + Thread.currentThread().getId()
                        + " " + Thread.currentThread().getName());
            }
            return true;
        });

        button.setOnClickListener(v -> {
            handler.sendEmptyMessage(1);

            ThreadPoolUtil.executeRunnableByFixedPool(() -> {
                Log.d(TAG, "executeRunnableByFixedPool:" + Thread.currentThread().getId()
                        + " " + Thread.currentThread().getName());
            });
        });
    }
}

执行结果如下:

image.png

关键代码分析

持续更新。。。

标签:异步,Thread,currentThread,util,线程,安卓中,import,android
From: https://blog.51cto.com/baorant24/5786154

相关文章

  • 线程与进程的区别
    进程是资源分配的最小单位,线程是程序执行的最小单位。进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操......
  • 线程的状态
    线程的状态从操作系统层面看有5种,从javaapi的层面看有6种一、线程状态5种:从操作系统层面看从操作系统的角度看,线程的状态有5种:初始状态,可运行状态,运行状态,阻塞状态,......
  • Generator函数异步应用
    协程协程的流程:协程A执行,执行到一半就将执行权转移给协程B,协程B交还执行权,然后A恢复执行。如下所示:function*asyncJob(){...varf=yieldreadFile(fileA);......
  • 浅谈Java实现线程同步&互斥
    先说简单的,Java实现线程互斥:无线程互斥的情况:/***@desc:没有进行互斥的情况*@author:YanMingXin*@create:2021/12/19-18:02**/publicclassMethod0{......
  • 单例 Bean 的线程安全问题
    最近面试遇到一个问题:单例Bean的线程安全问题怎么解决的。之前了解但是没有深究它的解决方法。大部分时候我们并没有在项目中使用多线程,所以很少有人会关注这个问题。......
  • 使用同步代码块解决线程安全问题
    使用同步代码块解决线程安全问题packageA_ShangGuiGu.Thread.ThreadDemo;​/***例子:三个窗口买票,使用实现Runnable接口的方法。*1.出现的问题:卖票过程中出现了重票,错......
  • 进程与线程的区别
     线程与进程的根本区别是进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。  在引入了线程的操作系统中,通常一个进程都有若干个线程,至少包......
  • devexpress中grid控件教程 多线程异步加载数据,进度条展示
    devexpress中最强大的控件,要数它的Grid了。几乎任务数据都可以展示,但今天要用它做另一个功能。假设我们开发这样一款软件:视频编辑软件。里面有个功能,提取视频中的音频。一......
  • 进程与线程
    简介1、进程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,简而言之就是程序的一次执行过程,也可以直接理解为电脑上的软件的运行情况,通过电脑的任务管......
  • 多线程
    线程简介多任务现实中太多同时做多件事情的例子,看起来是多个任务都在做,其实本质上我们的大脑同时只做了一件事多线程原来是一条路,慢慢因为车太多了,道路阻塞,效率极......