当前位置: 首页 > news >正文

线程的等待和唤醒

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

synchronized 解决了多线程竞争的问题: 我们可以 在 synchronized块中安全的对一个变量进行修改

 class TaskQueue{

  Queue<String> queue= new LinkedList<>();
    public synchronized void addTask(String s){
        this .queue.add(s)
    }
}

没有解决多线程协调的问题

 class TaskQueue{

 //队列
  Queue<String> queue= new LinkedList<>();

    public synchronized void addTask(String s){
        this .queue.add(s)
    }

    public synchronized String getTask(){
        
        while(queue.isEmpty()){

        }
        return queue.remove();
    }

}

多线程协调运行: 但条件不满足时,线程进入等待状态

  public synchronized String getTask(){  //1.线程1 获取锁
        
        while(queue.isEmpty()){ // 线程 1 判断条件
           this.wait();  //线程 1 进入等待状态
        }
        return queue.remove();
    }

线程协调机制: wait /notify

 class TaskQueue{

 //队列
  Queue<String> queue= new LinkedList<>();

    public synchronized void addTask(String s){
        this .queue.add(s)
        this.notify();
    }

    public synchronized String getTask(){
        
        while(queue.isEmpty()){

        }
        return queue.remove();
    }

}

wait /notiy 用于多线程协调运行:

  1. 在synchronized内部可以调用wait()是线程进入等待状态
  2. 必须在已获得的锁对象调用wait()方法
  3. 在synchronized内部可以调用notify/notiyAll()唤醒其他等待线程
  4. 必须在获得的锁对象调用notify/notifyAll()方法

转载于:https://my.oschina.net/2016jyh/blog/3011753

相关文章:

  • js中forEach回调同异步问题
  • 整行读字符串且需分割计算字符串个数
  • 比特大陆新一轮裁员50%,回应称系人员调整
  • zabbix linux系统模板更新
  • 2019.2.20 c++ 知识梳理
  • 微信全局登录设计与实现
  • 朝鲜APT集团Lazarus通过KEYMARBLE Backdoor瞄准俄罗斯组织
  • Less 日常用法
  • 手机端车牌号码键盘的vue组件
  • 回归生活:清理微信公众号
  • Cisco Nexus 系列交换机NX-OS升级
  • React开发实战
  • 工作中总结前端开发流程--vue项目
  • Java各种IO流的总结
  • MySQL-事务管理(基础)
  • [LeetCode] Wiggle Sort
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • bearychat的java client
  • CentOS 7 修改主机名
  • express + mock 让前后台并行开发
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • java小心机(3)| 浅析finalize()
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • js中的正则表达式入门
  • laravel5.5 视图共享数据
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Magento 1.x 中文订单打印乱码
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Vue 2.3、2.4 知识点小结
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 前端技术周刊 2019-02-11 Serverless
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 温故知新之javascript面向对象
  • 小试R空间处理新库sf
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • #13 yum、编译安装与sed命令的使用
  • #if 1...#endif
  • (JS基础)String 类型
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (六)软件测试分工
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (三)mysql_MYSQL(三)
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (未解决)macOS matplotlib 中文是方框
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .NET 使用 XPath 来读写 XML 文件
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET/C# 使窗口永不获得焦点
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc