栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

安卓:多线程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

安卓:多线程

一.主要思想

1.基础使用
  • 继承Thread类
  • 实现Runnable接口
  • Handler
2.复合使用
  • AsyncTask
  • HandlerThread
  • IntentService
二.通过实训案列来了解 (1)创建安卓项目

(2)主布局资源文件activity_main.xml



    

    
(3)主界面类MainActivity.java
package net.yuanjing.multithreading;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;



public class MainActivity extends AppCompatActivity {
    
    // 步骤1:自定义Handler子类(继承Handler类) & 复写handleMessage()方法
     class mHandler extends Handler {

        // 通过复写handlerMessage() 从而确定更新UI的操作
        @Override
        public void handleMessage(Message msg) {
            int ticket = (int) msg.obj;
         // 需执行的UI操作
            switch (msg.what) {
                case 2:
                    tvMsg.setText("票仓剩下的票数:" + ticket);
            }

        }
    }
    // 步骤2:在主线程中创建Handler实例
    private Handler mhandler = new mHandler();
    private TextView tvMsg;
    private Button btnStart;
    private int count = 10;//10张票
    //1.多线程第一步定义子线程
    //1.1继承Thread父类
    class MyThread1 extends Thread {
        String name;
        private Handler mHandler;
        public MyThread1(String name,Handler mHandler) {
            this.name = name;
            this.mHandler = mHandler;
        }
        @Override
        public void run() {
            super.run();
            //核心代码放这里
            while (count > 0) {
                Log.d("sky.Yuan", name + "购得了一张票");
                count--;
                // 步骤3:创建所需的消息对象
                Message msg = Message.obtain(); // 实例化消息对象
                msg.what = 2; // 消息标识
                msg.obj = count; // 消息内容存放

                // 步骤4:在工作线程中 通过Handler发送消息到消息队列中
                // 可通过sendMessage() / post()
                // 多线程可采用AsyncTask、继承Thread类、实现Runnable
                mhandler.sendMessage(msg);

                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //1.2  实现Runnable接口
    class MyThread2 implements Runnable {
        String name;
        public MyThread2(String name) {
            this.name = name;
        }
        //2.多线程步骤二重写run方法
        @Override
        public void run() {
            //核心代码放这里
            while (count > 0) {
                Log.d("sky.Yuan", name + "购得了一张票");
                count--;
                // 步骤3:创建所需的消息对象
                Message msg = Message.obtain(); // 实例化消息对象
                msg.what = 2; // 消息标识
                msg.obj = count; // 消息内容存放

                // 步骤4:在工作线程中 通过Handler发送消息到消息队列中
                // 可通过sendMessage() / post()
                // 多线程可采用AsyncTask、继承Thread类、实现Runnable
                mhandler.sendMessage(msg);
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //3.多线程步骤三定义和初始化线程
    private MyThread1 myThread1;
    private MyThread2 myThread2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化
        tvMsg = findViewById(R.id.tv_msg);
        btnStart = findViewById(R.id.btn_start);


        btnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //3.多线程步骤三定义和初始化线程
                myThread1 = new MyThread1("张三",mhandler);
                myThread2 = new MyThread2("李四");
                //4.多线程步骤四启动线程
                myThread1.start();
                new Thread(myThread2).start();
            }
        });
    }
}

(4)看一哈运行的效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007580.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号