线程

  1. 创建线程
  2. 线程池
  3. 与UI线程通信

    一、创建线程

    在Java中创建线程有两种方式 :

    1. 子类继承Thread类,创建该子类对象 ,覆盖run方法。
    2. 子类实现 Runnable接口 (实现run方法),并将子类对象作为Thread的构造函数的参数

    启动线程:Thread类对象调用start方法。

   

    二、 线程池 ThreadPoolExecutor and Executors

        线程池可以运行一个任务的多个并行实例,因此应确保代码是线程安全的。将可供多个线程访问的变量封装在 synchronized 块中。这种方法可以防止一个线程在写入变量时其他线程去读取该变量。

        ThreadPoolExecutor 和 Executors 是java.util.concurent包中的类。

ThreadPoolExecutor的构造函数:ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue)        

这五个参数分别代表着核心池数量,最多线程数,空闲的线程等待任务(task)最长时间, 时间单位,将被执行的runnable对象的队列(先进先出)。创建对象后,调用execute()方法,将自动执行队列中的runnable对象的run()方法。

Executors是一个工厂类,可以通过其静态方法创建多种类型的线程池,常用的方法有:

static     ExecutorService     newCachedThreadPool(),    static ExecutorService     newFixedThreadPool(int nThreads)

static ScheduledExecutorService     newScheduledThreadPool(int corePoolSize)    。调用线程池的execute(Runnable task)。

   

三、与UI线程通信

    Android 界面工具包并非线程安全工具包,UI线程是主线程,只有UI线程才能更新界面,不允许子线程更新界面。但是有以下几种办法

  1. Activity.runOnUiThread(Runnable)
  2. View.post(Runnable)
  3. View.postDelayed(Runnable, long)
  4. Handler
  5. AsyncTask
Handler:创建一个在UI线程上的handler对象并重载其handleMessage(Message inputMessage)方法,在子线程中调用其发送数据的方法,UI线程将调用handleMessage方法来接受数据更新界面。
AsyncTask:
			
            


 

 

 

 

            

 

 

 

            
继承AsyncTask实现上述方法,实例化其子类,并调用其execute(Program…program)方法

 

            

  

翻译 朗读 复制 正在查询,请稍候…… 重试 朗读 复制 复制 朗读 复制 via 谷歌翻译(国内)

posted @ 2020-03-15 19:02  lrllzp  阅读(138)  评论(0)    收藏  举报