Android中线程的使用

  • Java中线程的四种创建方式
      • 1.继承Thread类
      • 2.实现runable接口 创建线程
      • 3.使用Callable和Future创建线程
      • 4.线程池
  • Android中的线程

Java中线程的四种创建方式

1.继承Thread类

public class Demo1 {     public static void main(String[] args) {     MyThred m = new MyThred();//新建线程子对象m.start();//开启线程,执行run方法for (int i = 0; i < 10000; i++) {     System.out.println("aaaaaaaaaaaaaaaaaaaaa");}}}class MyThred extends Thread {     @Overridepublic void run() {      //重写run方法for (int i = 0; i < 10000; i++) {     System.out.println("线程");}}}

好处 : 可以直接使用Thread类中的方法 代码简单
弊端 : 如果已经有了父类 就不能使用这种方法 (java单继承)

2.实现runable接口 创建线程

public class demo_runable {     public static void main(String[] args) {     myRunnable mr = new myRunnable();//Runable是接口 Thread t = new Thread(mr); t.start();for (int i = 0; i < 10000; i++) {     System.out.println("aaaaaaaaaaa");}}}class myRunnable implements Runnable {     @Overridepublic void run() {     // TODO Auto-generated method stubfor (int i = 0; i < 10000; i++) {     System.out.println("线程");}}}

编译看父类 运行看子类

runable源码: //1    public Thread(Runnable target) {             init(null, target, "Thread-" + nextThreadNum(), 0);}//2       this.target = target;   局部变量 赋给成员变量//3  @Override    public void run() {             if (target != null) {                 target.run();        }    }   

构造函数中传入了Runable的引用 成员变量记住了她 start调用run方法时
内部判断成员变量是否为空 执行子类的Run方法

好处 : 即使自己定的的线程有了父类也没有关系 因为有了父类 也可以实现接口 而且接口是可以多实现的
弊端 : 不能直接使用Thread的方法 需要先获取到线程对象后 才能得到Thread方法 代码复杂

new class(){} 继承这个类

匿名内部类 :

public class demo_noName {     public static void main(String[] args) {          new Thread() {     @Overridepublic void run() {     for (int i = 0; i < 10000; i++) {     System.out.println("bb");}}}.start();new Thread(new Runnable() {     @Overridepublic void run() {     for (int i = 0; i < 10000; i++) {     System.out.println("aaaaaaaaaaaaaaa");}}}).start();}}

获取修改线程名字 this.getName()

3.使用Callable和Future创建线程

和Runnable接口不一样,Callable接口提供了一个call()方法作为线程执行体,call()方法比run()方法功能要强大。
call()方法可以有返回值 ,可以声明抛出异常
这个不常用,在此不提了。

4.线程池

新手玩安卓,暂时用不到吧。。。(我还没用到过:( )

Android中的线程

有什么不一样吗?没有。
那就再继续说一下概念和常用方法吧。
默认情况下,程序只有一条执行的流程,这个执行的流程就是主线程。
ANR(Application Not Responding,程序未响应)
出现的原因就是主线程的执行顺序流被某个耗时的操作阻塞了,导致后续的操作无法及时响应。
这个时候系统处于保护的机制会弹出窗口。
使用情景:
应用程序需要执行耗时操作(IO、网络等)的同时又要执行UI交互。
这种情况下应该使用多线程。

主线程:

  1. 默认线程
  2. 负责UI操作
  3. 严禁耗时操作

子线程:

  1. 需要手动开启
  2. 执行完毕后自动关闭
  3. 负责耗时操作
  4. 严禁UI操作

UI(主线程)要显示耗时操作(子线程)的结果。在子线程中发送消息给主线程。
匿名内部类很常用
线程间通信,很重要,且看下回分解

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. Android屏幕旋转时Activity不重新调用onCreate的方法
  5. Android禁止EditText自动弹出软键盘的方法
  6. Android执行linux外部命令
  7. Android(安卓)Studio中隐藏状态栏和标题栏的方法
  8. Android线程调度机制
  9. Android消息机制

随机推荐

  1. Eclipse在线升级Android ADT和SDK(4.x)方法
  2. 增加改查——android数据库篇二
  3. Android声明式UI框架 Litho 初探——基础
  4. 学习android(一)搭建android开发环境相关说
  5. Android中的Permission权限机制介绍
  6. HTC:我們正在評估 Ice Cream Sandwich 並
  7. 什么是Android静默拍摄 Android静默拍摄a
  8. Android拍摄视频流的格式转换(YUV --- RGB
  9. Android笔试题一
  10. Android 仿微信右上角点击加号弹出菜单