前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >带你搞懂Java多线程(四)

带你搞懂Java多线程(四)

作者头像
longzeqiu
发布2020-01-15 15:54:52
2460
发布2020-01-15 15:54:52
举报
文章被收录于专栏:Android小知识Android小知识

什么是线程间的协作

  • 线程之间相互配合完成某项工作

等待和通知

  • wait()
  • notify/notifyAll 这两个方法都是Object带的,wait让当前线程进行等待,notify通知一个线程取消等待,notifyAll通知所有线程取消等待。

标准范式

等待方: 1.获取对象的锁。 2.检查条件,条件不满足wait 3.条件满足,执行业务代码 syn(对象){ while(条件不满足){ 对象.wait(); } 执行业务代码 } 通知方: 1.获取对象的锁。 2.修改条件 3.通知等待方 syn(对象){ 执行业务代码,修改条件 对象.notify()/notifyAll(); } wait会释当前线程所持有的锁,而notify/notify是执行完syn代码块才释放锁 yield()和sleep()是不会释放当前线程所持有的锁

  • 在一般情况下,应该尽量用notifyAll
    • 因为notify只会唤醒一个线程
    • notify唤醒的线程不一定是应该唤醒的那个线程

ThreadLocal的使用

变量如果不是每个线程所独有会造成,结果不正确。 ThreadLocal也叫线程隔离 用法如下:

代码语言:javascript
复制
//定义变量
new ThreadLocal<参数化类型>(){
  @Override
  protected 参数化类型 initialValue(){
    return 值;
  }
}
//取变量
threadLocal.get();
//存变量
threadLocal.set(值);
//删除值
threadLocal.remove();

从而避免了线程间共享造成的错误。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是线程间的协作
    • 等待和通知
      • 标准范式
      • ThreadLocal的使用
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档