asynctask
asynctask是一种轻量级的异步任务类,可以在线程中执行后台任务,然后把任务执行结果传递到主线程,封装了thread和handler。采用了线程池的机制
线程池:asynctask就是通过线程池来执行异步任务的,
线程池的好处
1、重用线程池中的线程,避免了频繁创建和销毁线程
2、有效控制线程最大的并发数,避免了大量的线程之间因为相互抢占系统资源导致阻塞
3、简单的对线程进行管理,并提供定时执行以及指定间隔循环执行等功能
简单来说线程池就是系统为我们提供的管理线程的模块,通过它可以方便的控制项目中的线程,android中的线程池概念来自java中的executor,executor是一个接口,真正的线程池的实现是threadPoolExecutor,threadPoolExecutor提供了一系列参数来配置线程池
Thread
1、Thread的start()和run()是什么?
start()主要是启动线程,在内部调用runnable接口的run()方法,以单独的线程执行run()方法中的代码。
2、start()和run()的区别有哪些?
- 方法的定义:start()方法在java.lang.Thread类中定义,而run()方法在Runnable接口中定义,必须在实现类中重写
- 多次调用:start()方法不能多次调用,否则抛出异常,而run()方法可以多次调用,因为只是一种正常的方法调用。
- 新线程创建:当调用start()方法,会创建一个新线程,然后执行run()方法。如果直接调用run()方法,则不会创建新的线程,run()方法将作为当前调用线程本身的常规方法调用执行,不会发生多线程。
-
调用start()方法,会创建一个新的线程:class MyThread extends Thread {public void run() {System.out.println("当前线程的名称: " + Thread.currentThread().getName());System.out.println("run()方法调用");} }class demo {public static void main(String[] args) {MyThread t = new MyThread();t.start();} }直接调用()方法,不会创建新线程,而是在当前的线程执行run()方法class MyThread extends Thread {public void run() {System.out.println("\n");System.out.println("当前线程的名称: " + Thread.currentThread().getName());System.out.println("run()方法调用");} }class Test {public static void main(String[] args) {MyThread t = new MyThread();t.run();} }