线程
- 创建线程
- 线程池
-
与UI线程通信
一、创建线程
在Java中创建线程有两种方式 :
- 子类继承Thread类,创建该子类对象 ,覆盖run方法。
- 子类实现 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线程才能更新界面,不允许子线程更新界面。但是有以下几种办法:
- Activity.runOnUiThread(Runnable)
- View.post(Runnable)
- View.postDelayed(Runnable, long)
- Handler
- AsyncTask
Handler:创建一个在UI线程上的handler对象并重载其handleMessage(Message inputMessage)方法,在子线程中调用其发送数据的方法,UI线程将调用handleMessage方法来接受数据更新界面。
AsyncTask:



继承AsyncTask实现上述方法,实例化其子类,并调用其execute(Program…program)方法
翻译 朗读 复制 正在查询,请稍候…… 重试 朗读 复制 复制 朗读 复制 via 谷歌翻译(国内) 译
浙公网安备 33010602011771号