java线程锁标记_java 线程 中断标志位

课程素材来自 http://enjoy.ke.qq.com/    版权所有

java线程中,线程中断方法详解:

线程自然终止:自然执行完或抛出未处理异常

stop(),resume(),suspend()已不建议使用,stop()会导致线程不会正确释放资源,suspend()容易导致死锁。

java线程是协作式,而非抢占式

调用一个线程的interrupt() 方法中断一个线程,并不是强行关闭这个线程,只是跟这个线程打个招呼,将线程的中断标志位置为true,线程是否中断,由线程本身决定。

isInterrupted() 判定当前线程是否处于中断状态。

static方法interrupted() 判定当前线程是否处于中断状态,同时中断标志位改为false。

方法里如果抛出InterruptedException,线程的中断标志位会被复位成false,如果确实是需要中断线程,要求我们自己在catch语句块里再次调用interrupt()。 此处关于线程的sleep方法为什么会抛出中断异常

InterruptedException

看代码吧

packagecom.hw.ch1;

/*** Created by Administrator on 2018/5/8.*/public classHasInterrputException {

private static classUseThread extendsThread{

publicUseThread(String name){

super(name);

}

@Overridepublic voidrun() {

while(!isInterrupted()){

try{

Thread.sleep(100);

} catch(InterruptedException e) {

System.out.println("the flag is "+isInterrupted());

e.printStackTrace();

interrupt();

System.out.println("the flag2 is "+isInterrupted());

}

}

}

// 线程调用sleep方法后进入sleep状态,而sleep方法中java在实现的时候支持对中断标志位的检查,// 一旦sleep方法检查到了中断标志位为true,就会终止sleep,并抛出这个InterruptedException。// 方法里如果抛出InterruptedException,// 线程的中断标志位会被复位成false,如果确定是需要中断线程,// 要求我们自己在catch语句块里再次调用interrupt()// InterruptedException表示一个阻塞被中断了,阻塞包括sleep(),wait()public static voidmain(String[] args) throwsInterruptedException {

Thread endThread = newUseThread("HasInterrputEx");

endThread.start();

Thread.sleep(500);

// 为什么加上Thread.sleep(500),就会有异常发生,注释掉就没有呢// 因为调用interrupt的时候,子线程甚至还么来的及初始化完成endThread.interrupt();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值