当前位置: 代码迷 >> 综合 >> 线程 asynctask thread
  详细解决方案

线程 asynctask thread

热度:21   发布时间:2023-12-17 05:01:40.0

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();}
    }

  相关解决方案