需求场景:文件下载(下载,暂停,取消)

这里我们的研究对象时Thread
下载线程Thread 我们暂且叫做 a线程(下载线程)

1.下载

我们只需要开启一个a线程去下载文件资源

下面代码只是模拟下载(下载的具体代码,百度 Google就可以了)

  DownloadThread t= new DownloadThread();  t.start();

DownloadThread 类

    class DownloadThread extends Thread{        @Override        public void run() {            super.run();            while ("读取文件流"){//               这里是写文件流的操作            }        }    }

2.暂停下载(其实就是暂停一个线程)

我们如何去停止一个正在下载的线程呢?    1.Thread.stop 这个方法可以停止一个正在运行的线程,不过这种停止线程的操作是不安全的,java 也将这个方法声明为@Deprecated    2.通过自己加标示位,通过标示位来结束run方法,从来结束整个线程    3.Thread.interrupt() 如果你的线程中有Sleep方法则会抛出InterruptedException异常 通过捕获此异常进行终止run方法。如果是非阻塞线程你可以用Thread.currentThread().isInterrupted()状态来结束run方法

java 中的Thread.stop方法

    /**     * Requests the receiver Thread to stop and throw ThreadDeath. The Thread is     * resumed if it was suspended and awakened if it was sleeping, so that it     * can proceed to throw ThreadDeath.     *     * @deprecated because stopping a thread in this manner is unsafe and can     * leave your application and the VM in an unpredictable state.     */    @Deprecated    public final void stop() {        stop(new ThreadDeath());    }

在线程中设置停止标志位

    class DownloadThread extends Thread{        boolean isStop;        @Override        public void run() {            super.run();            while (!isStop){//               这里是读文件流 和写文件流的操作            }        }        public void stopDownload(){            isStop=true;        }    }

方法调用

        DownloadThread t= new DownloadThread();        t.start();        t.stopDownload();

使用Thread.interrupt()方法

    DownloadThread t= new DownloadThread();    t.start();    t.interrupt();    class DownloadThread extends Thread{        @Override        public void run() {            super.run();            while (!isInterrupted()){//               这里是读文件流 和写文件流的操作            }        }    }

停止线程池中的线程

ExecutorService mExecutors=Executors.newCachedThreadPool();//利用mExecutors.submit方法进行开启一个线程 获取到一个Future<?>对象Future<?> connectThreadFuture=mExecutors.submit(connectThread)//Future<?>对象提供中断线程的方法cancel 具体参数大家看api解释connectThreadFuture.cancel(true);//停止线程的方法

自己撸的一个多任务多线程断点下载的库,里面有暂停下载任务就是用了上面的方法,大家可以参考下
https://github.com/qinweiforandroid/QDownload

结束语

文章有什么不对的地方,还请大家斧正.

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. Android(安卓)Q WiFi Enable
  3. Android企业级程序完全退出的解决方案
  4. Android客户端和服务器端数据交互的第二种方法
  5. [置顶] 在此分享android源码下载地址 绝对可以下
  6. Android(安卓)内置应用截屏方法
  7. 查看ANR日志
  8. android中的Handler和Callback机制
  9. Android(安卓)条码扫描器 一维条形码 二维QR码 apk 源码 下载

随机推荐

  1. Android判断服务是否运行及定位问题实例
  2. Android属性动画---Property Animation(六
  3. Android(安卓)SeekBar控件
  4. android 使用webview加载网页问题
  5. android so壳入口浅析
  6. [Android(安卓)Training视频系列] 6.2 Sa
  7. android开玩笑之创建xml文件
  8. 创建一个android项目与创建一个android虚
  9. Android中Rect和RectF的区别与联系
  10. Android入门第十二篇之Gallery[转]