多线程知识点个人笔记

线程查漏

  • 线程中断:

    • 使用场景:
    • stop将被弃用,因为调用thread.stop()->该线程所持有的所有锁的突然释放(不可控制),一致性无法保证的数据再被其他线程使用会出bug

    • 使用 interrupt()标志线程被中断,再根据isInterrupted()值在线程内写具体的逻辑判断,优雅的停止线程(保证数据安全)

    • 线程6种状态:

      NEW(未start),RUNNABLE,BLOCKED,WAITING(无限期等待),TIMED_WAITING(等待一段时间后自动释放),TERMINATED(已经运行终止)

      • 以上由Thread类中State枚举类型列举,thread.getState()
      • 在NEW或TERMINATED状态调用interrupt(),Java认为毫无意义,所以并不会设置线程的中断标识位

      • WAITING/TIMED_WAITING,遇到中断操作时,会抛出一个InterruptedException异常,并清空中断标志位(抛出后线程不结束;若是调用sleep后再中断使,线程会提前结束 TIMED-WATING 状态,继续执行)

        理解为java认为wait或sleep和中断不应该同时使用?所以抛出异常提示处理?

  • sleep 与 与 wait 区别

    • Thread.sleep() Object.wait()

    • sleep():监控状态依然保持者??,且不会释放对象锁;

      wait():线程会放弃对象锁

  • start 与 与 run 区别

    • start()方法来启动线程,无需等待run()执行完就能继续执行之后的代码(真正实现了多线程运行)
    • 调用start()方法仅是让线程就绪,而直接调用run()则是(main线程)直接调用任务,执行完才执行后面代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值