实习日记 08/04 day20 理解JavaWeb--线程异步

总览

实习日记 08/04 day20 理解JavaWeb--线程异步_第1张图片

Java多线程中除了同步发生,异步问题也是需要考虑的。
我在做安卓开发的时候,经常会遇到这种情况:
下载线程下载数据,下载完成后出现现在完成弹窗。
这时候开发要怎么写呢,首先想到的是通过Handler传递Massager转到主线程修改UI,这很简单

public Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            if (msg.what == 0x123) {
                alswicth.setEnabled(false);
            }
            if (msg.what == 1699) {
                alswicth.setEnabled(true);
            }
            if (msg.what == 404) {
                btn_sj.setChecked(false);
                btn_fs.setChecked(false);
                btn_jr.setChecked(false);
                alswicth.setChecked(false);
                alswicth.setEnabled(false);
            }
        }

        ;
    };

但是真的这么写,你会发现你的Activity变得混乱不堪。这时候可以使用AsyncTask来实现异步,而AsyncTask是线程池的最佳实践,而线程池则是使用到了阻塞队列来实现。由此就将Java多线程的部分串联起来。

AsyncTask

实习日记 08/04 day20 理解JavaWeb--线程异步_第2张图片
AsyncTask是一个Android封装的一个轻量级异步类,他可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程更新UI
AsyncTask内部封装了两个线程池SeriaExecutor和THREAD_POOL_EXECUTOR和一个Handler

使用实例:
点击按钮:启动PreExecute出现小弹窗,显示进度条
后台下载:doinbackground
ppublish和update进行更新进度条
结束执行onPostExecute关掉进度条

从阻塞队列开始

阻塞队列,顾名思义是与阻塞相关的一种数据结构,阻塞Blocking有以下两种情况:
1.当队列中没有数据的情况下,消费这段

到线程池

包装好的线程池–AsycTask

你可能感兴趣的:(实习经验,多线程)