如果线程实现了复杂的算法并且分布在几个方法中,或者线程里面有递归调用的方法,就得使用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();
}
}