Java并行程序基础,springboot的启动过程面试

public static void main(String[] args) throws InterruptedException {

Thread t1 = new Thread(()->{

while (true) {

if (Thread.currentThread().isInter

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

rupted()) {

System.out.println(“Interrupt!”);

break;

}

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

System.out.println(“Interrupted When Sleep”);

Thread.currentThread().interrupt();

}

Thread.yield();

}

});

t1.start();

Thread.sleep(1000);

t1.interrupt();

}

  1. 如果在sleep的时候,线程被中断,则程序会抛出异常,并进入异常处理。在catch字句里,由于已经捕获了中断,我们可以立即退出线程,但是并没有这么做。因为**也许在这段代码中,还必须进行后续的处理,保障数据的一致性和完整性。**因此,执行了interrupt()方法再次中断自己,置上中断标志位。只有这么做,在检查isInterrupted(),才能发现当前线程已经被中断了。可以试一下将catch的interrupt注释掉进行验证。

  2. Thread.sleep()方法由于中断而抛出异常,此时,它会清除中断标记,如果不加处理,那么在下一次循环开始时,就无法不会这个中断,所以在异常处理中,再次设置中断标志位。

  3. 等待(wait)和通知(notify)

===================

  1. wait和notify不是在Thread类中的方法,而是在Object类中,意味着任何对象都能调用这两个方法。

  2. 如果一个线程调用了wait()方法,那么它就会计入object对象的等待队列。这个等待队列中,可能会有多个线程,因为系统运行多个线程同时等待同一个对象。当notify()被调用是,它就会从这个等待队列中,随机选择一个线程,并将其唤醒。但是这个选择不是公平的,并不是先等待的线程会优先被选择,这个选择完全是随机的。

  3. notifyAll()方法会唤醒这个等待队列的所有线程。

  4. 无论是wait()或者是notify()方法,必须包含在对应的synchronized语句中,无论是wait()或者notify()都需要首先获取目标对象的一个监视器。

  5. 而wait()方法执行后,会释放这个监视器,当被重新notify()后&#x

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值