博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程中断的控制
阅读量:6892 次
发布时间:2019-06-27

本文共 2268 字,大约阅读时间需要 7 分钟。

  hot3.png

上一个例子中使用的机制,可以使用在线程很容易被中断的情况下。但是如果线程实现了复杂的算法并且分布在几个方法中,或者线程里有递归调用的方法,我们就得使用一个更好的机制来控制线程的中断。为了达到这个目的,Java提供了InterruptedException异常。当检查到线程中断的时候,就抛出这个异常,然后在run()中捕获并处理这个异常。

package concurrency;import java.io.File;import java.util.concurrent.TimeUnit;class FileSearch implements Runnable {    private String initPath;    private String fileName;    public FileSearch(String initPath,String fileName) {        this.initPath = initPath;        this.fileName = fileName;    }    @Override    public void run() {        File file = new File(initPath);        if(file.isDirectory()) {            try {                directoryProcess(file);            } catch (InterruptedException e) {                System.out.printf("%s: The search has been interrupted",                     Thread.currentThread().getName());            }        }    }    private void directoryProcess(File file) throws InterruptedException {        File[] list = file.listFiles();        if(list != null){            for(int i = 0; i < list.length; i++){                if(list[i].isDirectory()){                    directoryProcess(list[i]);                }else{                    fileProcess(list[i]);                }            }        }        if(Thread.interrupted()){            throw new InterruptedException();        }    }    private void fileProcess(File file) throws InterruptedException {        if(file.getName().equals(fileName)){            System.out.printf("%s:  %s\n", Thread.currentThread().getName(),file.getAbsolutePath());        }        if(Thread.interrupted()){            throw new InterruptedException();        }    }}public class Test4{    public static void main(String[] args) {        FileSearch seatcher = new FileSearch("/home/fuhd/apk/gnapk/tencent/122","com.ymall.presentshop.apk");        Thread thread = new Thread(seatcher);        thread.start();        //等待十秒,然后中断线程        try {            TimeUnit.SECONDS.sleep(10);        } catch (InterruptedException e) {            e.printStackTrace();        }        thread.interrupt();    }}

在本范例中,我们使用了Java异常来控制线程的中断。当运行这个范例时,程序将进入文件夹查找是否包含指定的文件。例如,如果要查找的文件夹目录结构是\b\c\d,这个程序将递归调用processDirectory()方法3次。不管递归调用了多少次,只要线程检测到它已经被中断了,就会立即抛出InterruptedException异常,然后继续执行run()方法。

转载于:https://my.oschina.net/fhd/blog/403636

你可能感兴趣的文章
【图文详解】Iptables
查看>>
Zabbix-web的中文显示及其乱码问题解决方法
查看>>
Gluster管理命令的总结与归纳
查看>>
利用OCT部署office 2010 plus
查看>>
深入理解mysql
查看>>
Centos 6.4下搭建pptp!
查看>>
杂谈MVVM在Silverlight中应用
查看>>
FreeNAS如何配置LACP(链路聚合和故障)
查看>>
第4章 最简单的C程序设计——顺序程序设计
查看>>
Mysql面试题精选
查看>>
用sersync进行实时同步数据
查看>>
Exchange 2010 OAB无法更新
查看>>
Linux iftop 流量监控工具
查看>>
简单的python程序实现99乘法口诀表
查看>>
Cocos2d-x游戏实例-《跑跑跑》制作教程(第四篇)——地图卷动
查看>>
【PPT技巧】让PPT背景音乐仅在播放视频时暂停
查看>>
Ubuntu14.04安装分布式存储sheepdog+zookeeper
查看>>
innodb引擎
查看>>
pandas.to_numeric转化数据为数字型
查看>>
在企业环境下实现禁止使用USB的高安全措施
查看>>