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 {
	@Override
	public 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 {
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for (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() {
			@Override
			public void run() {
				for (int i = 0; i < 10000; i++) {
					System.out.println("bb");
				}
			}
		}.start();

		new Thread(new Runnable() {
			@Override
			public 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(主线程)要显示耗时操作(子线程)的结果。在子线程中发送消息给主线程。
匿名内部类很常用
线程间通信,很重要,且看下回分解 😃

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bruce.vvu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值