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
原创粉丝点击