android实现多线程基础

发布时间 2023-03-27 19:32:32作者: 天启A
//创建线程类 
class Mythread extends Thread{
      @Override
    public void run(){
//定义行为
}
}
//实例化线程类
 MyThread mt=new MyThread(“线程名称”);
//// 此处采用 start()开启线程
 mt.start();
//更加简便的匿名类,调用简单,但是不能复用
new
Thread("线程名"){ @Override public void run() { }.start();

 

 

Thread与Runnable区别:多线程完成独自的任务与多线程共同完成任务

//注意:其实runnable创建的还是thread类

//实现了Runnable接口的类,称为 线程辅助类;Thread类才是真正的线程类

//创建线程辅助类
class Mythread implements Runnable{
    @override
public void run(){
 
    }
}
//实例化线程辅助类
MyThread mt=new MyThread();
//实例化线程类
//runnable接口没有对线程的支持,需要新建一个线程类,从内部运行runnable类
Thread td=new Thread(mt);

  // 当调用start()方法时,线程对象会自动回调线程辅助类对象的run(),从而实现线程操作
td.start();
//匿名类runnable
Runnable mt = new Runnable(){
         @Override
                    public void run() {
                    }
};

Thread mt1 = new Thread(mt, "窗口1");
mt1.start();

Handler作用于:将子线程的信息传输到主线程上,实现异步消息处理问题

在主线程实现更新组件保证了安全性,因此在app中通过Handler提醒主线程更新组件

方法1:使用 Handler.sendMessage()

//新建Handler类(内部类)
class Myhandler extends Handler{
 @Override
        public void handleMessage(Message msg) {
// 需执行的UI操作
}
}

//在主线中新建handler实例
 private Handler mhandler = new mHandler();

 //创建所需的消息对象
        Message msg = Message.obtain(); // 实例化消息对象
        msg.what = 1; // 消息标识
        msg.obj = "AA"; // 消息内容存放

//通过Handler发送消息到消息队列
 mHandler.sendMessage(msg);
//匿名内部类

//在主线程中创建handler实例
private Handler mhandler = new  Handler(){
    @Override
                public void handleMessage(Message msg) {
                        ...// 需执行的UI操作
                }
};

//创建消息对象
 Message msg = Message.obtain(); // 实例化消息对象
      msg.what = 1; // 消息标识
      msg.obj = "AA"; // 消息内容存放
//发送消息至消息队列中
mHandler.sendMessage(msg);

Handler.post()

// 步骤1:在主线程中创建Handler实例
    private Handler mhandler = new mHandler();
 
    // 步骤2:在工作线程中 发送消息到消息队列中 & 指定操作UI内容
    // 需传入1个Runnable对象
    mHandler.post(new Runnable() {
            @Override
            public void run() {
                ... // 需执行的UI操作 
            }
 
    });
 
    // 步骤3:开启工作线程(同时启动了Handler)

 

Handler机制 中有3个重要的类:

  • 处理器 类(Handler)
  • 消息队列 类(MessageQueue)
  • 循环器 类(Looper)

当创建Handler时会自动创建looper和messagequeue,保证了handler的对象与looper和messagequeue的关联

Looper的主要方法

1.Looper.prepareMainLooper();//为主线程创建一个循环器对象

2.Looper.prepare();//为子线程创建一个循环器对象————这两个方法同时都可以创建一个消息队列对象

主线程不需要创建looper对象,会自动生成;但是子线程若不创建looper对象,无法生成handler对象

当生成looper&messagequeue对象时会自动进入消息循环:Looper.loop();