Android多线程
16lz
2021-12-04
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交互。
这种情况下应该使用多线程。
主线程:
- 默认线程
- 负责UI操作
- 严禁耗时操作
子线程:
- 需要手动开启
- 执行完毕后自动关闭
- 负责耗时操作
- 严禁UI操作
UI(主线程)要显示耗时操作(子线程)的结果。在子线程中发送消息给主线程。
匿名内部类很常用
线程间通信,很重要,且看下回分解
更多相关文章
- 浅谈Java中Collections.sort对List排序的两种方法
- Python list sort方法的具体使用
- python list.sort()根据多个关键字排序的方法实现
- Android屏幕旋转时Activity不重新调用onCreate的方法
- Android禁止EditText自动弹出软键盘的方法
- Android执行linux外部命令
- Android(安卓)Studio中隐藏状态栏和标题栏的方法
- Android线程调度机制
- Android消息机制