//创建线程类
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();

android实现多线程基础的更多相关文章

  1. 13、Android的多线程与异步任务

    课程目标:学习Android中异步操作的三大方式 重点难点:Handler与线程的关系   Handler消息队列的实现 考核目标: 使用Handler是异步的,它会建立新线程么? no Handle ...

  2. 2017 Android 面试题 [ 基础与细节 ]

    2017 Android 面试题 [ 基础与细节 ] 感谢@chuyao抛出的这些问题,平时业务代码写多了,很多基础的东西变得含糊不清了,这次裸辞出来找工作确实没有之前顺利,顺便求上海Android开 ...

  3. Java基础知识笔记(四:多线程基础及生命周期)

    一.多线程基础 编写线程程序主要是构造线程类.构造线程类的方式主要有两种,一种是通过构造类java.lang.Thread的子类,另一种是通过构造方法实现接口java.lang.Runnable的类. ...

  4. Java多线程干货系列—(一)Java多线程基础

    前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧. 正文 线程与进程 1 线程:进程中负责程序执行的 ...

  5. JAVASE02-Unit010: 多线程基础 、 TCP通信

    多线程基础 . TCP通信 * 当一个方法被synchronized修饰后,那么 * 该方法称为同步方法,即:多个线程不能同时 * 进入到方法内部执行. package day10; /** * 当多 ...

  6. JAVASE02-Unit09: 多线程基础

    Unit09: 多线程基础 * 线程 * 线程用于并发执行多个任务.感官上像是"同时"执行 *  * 创建线程有两种方式. * 方式一: * 继承线程并重写run方法来定义线程要执 ...

  7. java多线程基础

    多线程基础 读书练习照猫画虎 package Threadtest; import java.util.Date; import java.util.concurrent.ArrayBlockingQ ...

  8. C#编程总结(二)多线程基础

    C#编程总结(二)多线程基础 无论您是为具有单个处理器的计算机还是为具有多个处理器的计算机进行开发,您都希望应用程序为用户提供最好的响应性能,即使应用程序当前正在完成其他工作.要使应用程序能够快速响应 ...

  9. Android 触摸手势基础 官方文档概览

    Android 触摸手势基础 官方文档概览 触摸手势检测基础 手势检测一般包含两个阶段: 1.获取touch事件数据 2.解析这些数据,看它们是否满足你的应用所支持的某种手势. 相关API: Moti ...

  10. Android Content Provider基础

    Android Content Provider基础 Content Providers Content providers管理对一个结构化的数据集合的访问.它们封装了数据,并且提供了保护数据安全性的 ...

随机推荐

  1. IPsecVPN 服务器一键安装脚本

    IPsec VPN 服务器一键安装脚本 使用 Linux 脚本一键快速搭建自己的 IPsec VPN 服务器.支持 IPsec/L2TP, Cisco IPsec 和 IKEv2 协议.你只需提供自己 ...

  2. SwiftObject 杂记

    一.前言 看了一段时间的Swift,慢慢转变了一些对Swift的看法. Swift作为苹果新晋的开发语言.具有模板编程.函数编程.协议多继承.vTable静态绑定.值引用类型区分.Option类型等动 ...

  3. 抖音越狱版本App下载

    一.准备下载越狱版本抖音App 一般下载越狱版本App要不从越狱手机上Crack 正版App,另外一种从PP助手或者越狱市场进行下载,这里选择第二种方式 感谢 http://iosre.com/t/p ...

  4. 椭圆曲线密码学(ECC)加解密,附带python代码

    想起来很久没写博客了,刚好今天要写实验报告,随便把之前的也完成吧 1.椭圆曲线概念 椭圆曲线在经过化解后,可以用这条式子表达:E:y²=x³+ax+b 其背后的密码学原理,是基于椭圆曲线离散对数问题, ...

  5. 01-布局扩展-BFC完成圣杯布局

    <!DOCTYPE html>   <html lang="en">   <head>   <meta charset="UTF ...

  6. SELinux 安全模型——TE

    首发公号:Rand_cs SELinux 安全模型--TE 通过前面的示例策略,大家对 SELinux 应该有那么点感觉认识了,从这篇开始的三篇文章讲述 SELinux 的三种安全模型,会涉及一些代码 ...

  7. kettle从入门到精通 第三十七课 kettle 全量同步(数据量小)

    1.下图是一些常见的数据同步业务场景: 实时数据:对实时性要求很高,延迟在毫秒范围内.常见的有kafka/rabbitmq等消息中间件,mysql binlog日志,oracle归档日志等. 离线数据 ...

  8. 结构型模式(Structural Pattern)

    模式介绍 结构型模式(Structural Pattern)的主要目的就是将不同的类和对象组合在一起,形成更大或者更复杂的结构体.该模式并不是简单地将这些类或对象摆放在一起,而是要提供它们之间的关联方 ...

  9. FFmpeg GL-transition转场的简单使用体验

    写在前面 最近在处理视频,遇到两个视频之间的转场用原生的 xfade写起来很痛苦,实现成本高,难度大:我这里主要用的FFmpeg,就想找一个插件专门干转场这个事:搜索了一翻后找到 GL-transit ...

  10. Prometheus监控系统(三)Prometheus与Grafana集成

    1. Prometheus和Grafana集成 Grafana是一款采用Go语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具.目前已支持绝大部分常 ...