码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java——》线程间是如何通信的


    推荐链接:
        总结——》【Java】
        总结——》【Mysql】
        总结——》【Redis】
        总结——》【Kafka】
        总结——》【Spring】
        总结——》【SpringBoot】
        总结——》【MyBatis、MyBatis-Plus】
        总结——》【Linux】
        总结——》【MongoDB】
        总结——》【Elasticsearch】

    Java——》线程间是如何通信的

    • 一、共享内存
    • 二、消息传递
      • 1、wait()和notify()方法
      • 2、wait(long timeout)和notify()方法
      • 3、join()方法
      • 4、Lock和Condition接口
      • 5、BlockingQueue阻塞队列

    线程之间的通信有两种方式:共享内存和消息传递。

    一、共享内存

    在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。
    典型的共享内存通信方式,就是通过共享对象进行通信。
    image.png
    例如线程A与线程B之间如果要通信的话,那么就必须经历下面两个步骤:

    1. 线程A:把本地内存A更新过的共享变量刷新到主内存中去。
    2. 线程B:到主内存中去读取线程A之前更新过的共享变量。

    二、消息传递

    在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信。
    在Java中典型的消息传递方式:

    • wait()和notify()方法
    • wait(long timeout)和notify()方法
    • join()方法
    • Lock和Condition接口
    • BlockingQueue阻塞队列

    1、wait()和notify()方法

    wait()方法使线程进入等待状态,直到其他线程调用notify()或notifyAll()方法将其唤醒。notify()方法唤醒一个等待中的线程,notifyAll()方法唤醒所有等待中的线程。

    2、wait(long timeout)和notify()方法

    wait(long timeout)方法使线程进入等待状态,直到其他线程调用notify()方法将其唤醒,或者等待时间超过指定的timeout时间。notify()方法唤醒一个等待中的线程。

    3、join()方法

    join()方法使一个线程等待另一个线程执行完毕。当一个线程调用另一个线程的join()方法时,当前线程将被阻塞,直到另一个线程执行完毕。

    4、Lock和Condition接口

    Lock接口提供了比synchronized关键字更灵活的锁机制,Condition接口提供了更灵活的等待/通知机制。
    通过Lock接口的lock()方法获取锁,unlock()方法释放锁。
    通过Condition接口的await()方法使线程等待,signal()方法唤醒一个等待中的线程,signalAll()方法唤醒所有等待中的线程。

    5、BlockingQueue阻塞队列

    BlockingQueue是一个支持阻塞操作的队列。
    当队列为空时,获取元素的线程将被阻塞,直到队列中有可用元素;
    当队列满时,插入元素的线程将被阻塞,直到队列有空闲位置。

  • 相关阅读:
    多线程面试题总结
    YGG 经理人杯总决赛已圆满结束,来看看这份文字版总结!
    HTML 学习笔记(二)标题
    Java将获取的参数,图片以及pdf文件放入到word文档指定位置
    设计模式。
    java计算机毕业设计开放式教学评价管理系统源码+mysql数据库+系统+lw文档+部署
    Win11电脑摄像头打开看不见,显示黑屏如何解决?
    Paused in debugger 弹框解决办法
    Python 教程之控制流(10)在Python中有效地使用迭代
    Spark案例实际操作
  • 原文地址:https://blog.csdn.net/weixin_43453386/article/details/132763174
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号