1.4线程中断的控制

如果线程实现了复杂的算法并且分布在几个方法中,或者线程里面有递归调用的方法,就得使用Java提供的InterruptedException异常来控制线程的中断。当检查到线程中断的时候,抛出InterruptedException异常,然后在run方法中捕获并处理这个异常。

1.编写一个实现Runnable接口的FileSearch类,该类用于查找某个文件夹里是否含有某个文件。

public class FileSearch implements Runnable{

    //初始化文件夹和要查找的文件名字
    private String initFile;
    private String fileName;

    public FileSearch(String initFile,String fileName)
    {
        this.initFile=initFile;
        this.fileName=fileName;
    }



    @Override
    public void run() {
        //
        File file=new File(initFile);
        if(file.isDirectory())
        {
            try
            {
                directoryProcess(file);
            }catch(InterruptedException e)
            {
                System.out.printf("%s:The FileSearch 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();
        }
    }
}

2.主类实现

import java.util.concurrent.TimeUnit;

public class Main {

    public static void main(String[] args) {
        //

        FileSearch search=new FileSearch("d:\\testing","test.doc");
        Thread thread=new Thread(search);
        thread.start();

        try
        {
            TimeUnit.SECONDS.sleep(10); //休眠10秒

        }catch(InterruptedException e)
        {
            e.printStackTrace();
        }

        thread.interrupt();

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值