Java小技巧:利用异常中断当前任务
在日常开发中,我们经常遇到调用别人的代码来完成某个任务,但是当代码比较耗时的时候,没法从外部终止该任务。有些程序从开始就考虑到了这个场景,就会提供对应的cancel
或stop
之类的方法用于终止任务,但还是会有很多三方库并没有提供响应接口。比如,下面这个下载示例:
class DownloadTask { public void download(Listener listener) { try { for (int i = 0; i < 100; i++) {//模拟下载过程 Thread.sleep(1000); listener.onProgressUpdated(i + 1); } listener.onCompleted(); } catch (InterruptedException e) { throw new RuntimeException(e); } } public interface Listener { void onProgressUpdated(int progress); void onCompleted(); } } public class Main { public static void main(String[] args) throws InterruptedException { DownloadTask task = new DownloadTask(); task.download(new DownloadTask.Listener() { @Override public void onProgressUpdated(int progress) { System.out.println("onProgressUpdated: " + progress); if (isInterrupted.get()) { throw new EndException();