java 线程 自定义循环出口和interrupt的区别 学习笔记
来源:互联网 发布:淘宝装修 客户达 编辑:程序博客网 时间:2024/05/17 22:30
一、 新建一个集成Thread的子类Example
(1). 自定义循环出口,letOver(),isOvered();
(2). 第一个循环是自定义循环出口,每次沉睡100ms,输出一句话;
(3). 第二个循环式内部方法interrupt的中断出口,每次沉睡100ms,输出一句话;
二、 创建测试类
(1). 创建子线程Example对象
(2). 子线程Example对象开始运行
(3). 主线程沉睡1000ms 等待子线程(子线程可打印10次)
(4). 自定义中断方法中断子线程的第一个循环
(5). 主线程沉睡1000ms 等待子线程(子线程可打印10次)
(6). 系统方法interrupt方法中断子线程的第二个循环
但是,当线程最后次沉睡,被捕捉异常后,会将线程重新设置为非中断状态,从而报错后一直循环,不能中断,
此时换种沉睡方式
long time = System.currentTimeMillis();
while(System.currentTimeMillis() - time < 100){}
就可以解决了。
代码如下:
public class Example extends Thread {// 自定义循环出口private boolean isOver = false;public void letOver() {isOver = true;}public boolean isOvered() {return isOver;}@Overridepublic void run() {// 利用自定义循环结束循环while (!this.isOvered()) {// 打印三分钟System.out.println("哈哈");try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blockSystem.err.println("自定义报错");}}while (!Thread.interrupted()) {System.out.println("呵呵");// 延迟100nslong time = System.currentTimeMillis();while(System.currentTimeMillis() - time < 100){}// 面向对象是统一线程时:捕获异常的操作,不可以同interrupt同时使用//try {//// examplex线程睡觉100ms//Thread.sleep(100);//} catch (InterruptedException e) {//// 最后一次进入睡眠时,主线程命令example线程中断,//// 此线程已中断,sleep不能继续进行,被捕捉异常 // 捕获异常后,会将线程重新设置为非中断状态//e.printStackTrace();//}}}}public class TestThread {public static void main(String[] args) {Example example = new Example();example.start();//开始打印// 100ms后结束example线程try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("自定义中断前的状态"+example.isInterrupted());example.letOver();System.out.println("自定义中断后的状态"+example.isInterrupted());// 让example线程中断try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("interrupt中断前的状态"+example.isInterrupted());example.interrupt();System.out.println("interrupt中断后的状态"+example.isInterrupted());}}
阅读全文
0 0
- java 线程 自定义循环出口和interrupt的区别 学习笔记
- java个人学习笔记20(wait()和sleep()区别+停止线程+interrupt()+join()+setDaemon()+setPriority()+多线程常见写法)
- java 线程的interrupt和sleep、wait
- JAVA线程的interrupt
- JAVA线程的interrupt
- JAVA线程的interrupt
- JAVA线程的interrupt
- JAVA线程的interrupt
- 【Java】interrupt、interrupted和isInterrupted的区别
- JAVA interrupt、interrupted和isInterrupted的区别
- java---interrupt、interrupted和isInterrupted的区别
- java多线程学习笔记(八) ——线程停止(interrupt)
- java线程interrupt的用处
- java线程的中断(interrupt)
- Java线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别
- uc/os程序设计点滴记录
- UVa 10048 Audiophobia 最短路的最大值
- python fuzzywuzzy模块 模糊字符串匹配详细用法
- source insight 保存时出现error:too many files are open.
- Python模块之信号学习(signal)
- java 线程 自定义循环出口和interrupt的区别 学习笔记
- 算法复杂度简析
- HBase数据库检索性能优化策略
- 两人过桥
- 使用uc/os开发要明确的几个堆栈
- algorithm这个头文件里包含的常用函数
- R做圈图
- Google/LintCode:E-Guess Number Game
- 2017 Multi-University Training Contest