文档章节

Java 多线程 - 线程 - 中断 - 3

pan_1308
 pan_1308
发布于 2017/08/28 17:21
字数 377
阅读 53
收藏 1

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

实例背景

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

示例:线程类实现 在一个文件夹及其子文件夹中寻找一个指定的文件。

import java.io.File;
/**
 * 中断控制 - run方法中 通过捕获 InterruptedException 异常来控制 线程是否中断
 */
public 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);
		try {
		   if(file.isDirectory()){
			   directoryProcess(file);
		   }
		} catch (InterruptedException e) { // 通过 run 方法来 捕获  InterruptedException 来判断是否被中断.
			System.out.println(Thread.currentThread().getName() + " 被中断...");
		}
	}
	
	// 目录操作
	public void directoryProcess(File file) throws InterruptedException{
		File[] list = file.listFiles();
		if(list != null && list.length > 0){
			for(int i=0;i<list.length;i++){
				if(list[i].isDirectory()){ // 目录
					directoryProcess(list[i]);
				}else{ // 文件
					fileProcess(list[i]);
				}
			}
		}
	}
	
	// 文件操作
	public void fileProcess(File file) throws InterruptedException{
		if(fileName.equals(file.getName())){
			System.out.println(Thread.currentThread().getName()+",文件名:"+file.getName()+",路径:"+file.getAbsolutePath() +",找到了..");
		}else{
			System.out.println("【fileName】-" + fileName +",【file.getName】-"+file.getName() +",没被找到..");
		}
		if(Thread.interrupted()){ //判断 线程是否被中断
			throw new InterruptedException();
		}
	}
}
public class FileSearchTest {

	public static void main(String[] args) {
		FileSearch fileSearch = new FileSearch("F:\\logs", "warn.log");
		Thread thread = new Thread(fileSearch);
		thread.start();
		
		try {
			Thread.sleep(1);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		thread.interrupt();
	}
}
// console结果:
【fileName】-warn.log,【file.getName】-log4j.properties,没被找到..
Thread-0 被中断...

 

pan_1308
粉丝 5
博文 95
码字总数 58819
作品 0
黄冈
私信 提问
加载中
请先登录后再评论。
Java多线程系列--“基础篇”09之 interrupt()和线程终止方式

概要 本章,会对线程的interrupt()中断和终止方式进行介绍。涉及到的内容包括: 1. interrupt()说明 2. 终止线程的方式 2.1 终止处于“阻塞状态”的线程 2.2 终止处于“运行状态”的线程 3....

xiaomin0322
2018/05/25
10
0
java多线程基础

[TOC] java多线程 使用多线程的原因: CPU的多核: 一个线程在一个时刻只能运行在一个处理器核心上, 多线程可以提高对多核的利用率; I/O阻塞: I/O操作过多的程序, 单线程CPU利用率低; 为了更快...

osc_2eyqrgs7
2018/07/28
2
0
20165234 《Java程序设计》第八周学习总结

第八周学习总结 教材内容学习 第十二章 Java 多线程机制 进程与线程 进程是程序的一次动态执行过程,对应了从代码加载、执行至执行完毕的一个完整过程。 线程不是进程,是比进程更小的执行单...

osc_wpln0ly9
2018/04/22
2
0
20200225 Java 多线程(1)-廖雪峰

Java 多线程(1)-廖雪峰 多线程基础 进程和线程的关系就是:一个进程可以包含一个或多个线程,但至少会有一个线程。 操作系统调度的最小任务单位其实不是进程,而是线程。常用的Windows、L...

osc_jqntvyw1
02/25
7
0
多线程 -线程面试题(一)

下面是 Java 线程相关的热门面试题,你可以用它来好好准备面试。 1 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它...

晨猫
2017/10/27
24
0

没有更多内容

加载失败,请刷新页面

加载更多

反反爬 | 如何巧过 CloudFlare 5秒盾?

巧破 Cloudflare 5秒盾 相信下面这个界面大家都不会陌生。【图1-1】 图1-1 当我们第一次访问使用 CloudFlare 加速的网站时,网站就会出现让我们等待 5 秒种的提示,当我们需要的通过爬虫爬取...

咸鱼学Python
2019/09/20
0
0
​Python爬虫学习之代理IP抓取(2)

Python爬虫学习之代理IP抓取 ✕ 代理数据保存清洗 运行效果: 然后我的IP就给封了 代理测试 代码没问题。。。 不过短短几分钟抓了6000条代理,也算是不错了 需要下载的模块 pip install tiny...

萌海无涯
2019/08/05
0
0
从nginx1.17.9源码理解nginx -s reload

使用nginx的时候,我们经常会使用nginx -s reload命令重启。下面我们就分析一下,执行这个命令的时候,nginx里发生了什么?我们从nginx的main函数开始。在main函数里,执行ngx_get_options函...

theanarkh
03/15
6
0
Geekpwn 2020云端挑战赛 Noxss & umsg

作者:LoRexxar'@知道创宇404实验室 时间:2020年7月14日 前两天看了今年Geekpwn 2020 云端挑战赛,web题目涉及到了几个新时代前端特殊技巧,可能在实战中利用起来难度比较大,但是从原理上又...

osc_ccy4urvn
19分钟前
0
0
host、referer和origin的区别

题图 By Clm From Bing 在http协议中这三个请求头比较容易让人产生混淆。 host比较容易理解,来看下MDN网站给的介绍: Host 请求头指明了服务器的域名(对于虚拟主机来说),以及(可选的)服...

挥刀北上
2019/02/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部