java线程中断哪些_Java线程中断与阻塞有什么不同?Java线程中断与阻塞的对比

本篇文章给大家带来的内容是关于Java线程中断与阻塞有什么不同?Java线程中断与阻塞的对比,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

很多Java开发人员(包括我),尤其是刚进入软件行业的新手,认为Java设置线程中断就是表示线程停止了,不往前执行了,

Thread.currentThread().interrupt()

其实不是这样的,线程中断只是一个状态而已,true表示已中断,false表示未中断

//获取线程中断状态,如果中断了返回true,否则返回false

Thread.currentThread().isInterrupted()

设置线程中断不影响线程的继续执行,但是线程设置中断后,线程内调用了wait、jion、sleep方法中的一种, 立马抛出一个 InterruptedException,且中断标志被清除,重新设置为false。

class Thread2 implements Runnable{@Override

public void run() {

try {

System.out.println();

System.out.println(hread.currentThread().isInterrupted());//输出false

Thread.currentThread().interrupt();//当前线程中断

System.out.println("Thread.currentThread().isInterrupted());//输出true

Thread.sleep(3000);//中断后执行sleep会抛出异常

} catch (InterruptedException e) {

e.printStackTrace();

System.out.println("Thread.currentThread().isInterrupted());//输出false

}

}

}

该如何让线程真正停止不往前执行呢:

真正让线程停止下来(阻塞),Java提供了一个较为底层的并发工具类:LockSupport,该类常用的方法有两个,1

park(Object blocker) 表示阻塞指定线程,参数blocker当前线程对象 2 unpark(Thread thread) 唤醒指定线程,参数thread指定线程对象

示例:public void test_LockSupport(){

Thread thread=new Thread(new Thread_park());

thread.start();//阻塞当前线程

Thread thread2=new Thread(new Thread_unpark(thread));

thread2.start();//唤醒被阻塞的线程

}

class Thread_park implements Runnable{

@Override

public void run() {

System.out.println("Thread_park开始");

LockSupport.park(this);//阻塞当前线程

System.out.println("Thread_park结束");

}

}

class Thread_unpark implements Runnable{

private Thread thread;

public Thread_unpark(Thread thread) {

this.thread = thread;

}

@Override

public void run() {

System.out.println("Thread_unpark开始");

try {

Thread.sleep(5000);

} catch (InterruptedException e) {

e.printStackTrace();

}

LockSupport.unpark(thread);//唤醒被阻塞的线程

System.out.println("Thread_unpark结束");

}

}

相关推荐:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值