Java基础知识(十二)--多线程通信

Java多线程之间的通信 在 Java 多线程编程中,​​线程通信​​是指多个线程之间通过某种机制进行数据交换或协调执行顺序,以确保线程间能够正确、高效地协作完成任务。由于线程是并发执行的独立个体,默认情况下它们之间是相互隔离的,但实际业务中常常需要线程间共享数据或同步操作(如生产者-消费者模型),这时就需要借助Java提供的通信机制来实现线程间的交互。 阅读详情

微信公众号:Java患者
专注Java领域技术分享

两个线程间的通信

什么时候需要通信

  • 多个线程并发执行时,在默认情况下CPU是随机切换线程的

  • 如果我们希望他们有规律的执行.就可以使用通信,例如每个线程执行一次打印

怎么通信

  • 如果希望线程等待,就调用wait()

  • 如果希望唤醒等待的线程,就调用notify()

  • 这两个方法必须在同步代码中执行,并且使用同步锁对象来调用

三个或者三个以上间的线程通信

  • notify()是随机唤醒一个线程

  • notifyAll()方法是唤醒所有线程

  • jdk5之前无法唤醒指定的一个线程

  • 如果多个线程之间通信,需要使用notifyAll()通知所有线程,用while来反复判断条件

同步

  • 使用ReentrantLock类的lock()和unlock方法进行同步

通信

  • 使用ReentrantLock类的newCondition()方法可以获取Condition对象

  • 需要等待的时候使用Condition的await()方法,唤醒的时候用signal()方法

  • 不同的线程使用不同的Condition,这样就能区分唤醒的时候找哪个线程了

线程组

  • 概述

    MyRunnable mr = new MyRunnable();
    Thread t1 = new Thread(mr, "张三");
    Thread t2 = new Thread(mr, "李四");
    //获取线程组
    // 线程类里面的方法:public final ThreadGroup getThreadGroup()
    ThreadGroup tg1 = t1.getThreadGroup();
    ThreadGroup tg2 = t2.getThreadGroup();
    // 线程组里面的方法:public final String getName()
    String name1 = tg1.getName();
    String name2 = tg2.getName();
    System.out.println(name1);
    System.out.println(name2);
    // 通过结果我们知道了:线程默认情况下属于main线程组
    // 通过下面的测试,你应该能够看到,默任情况下,所有的线程都属于同一个组
    System.out.println(Thread.currentThread().getThreadGroup().getName());
    // ThreadGroup(String name)
    ThreadGroup tg = new ThreadGroup("这是一个新的组");
    
    MyRunnable mr = new MyRunnable();
    // Thread(ThreadGroup group, Runnable target, String name)
    Thread t1 = new Thread(tg, mr, "张三");
    Thread t2 = new Thread(tg, mr, "李四");
    
    System.out.println(t1.getThreadGroup().getName());
    System.out.println(t2.getThreadGroup().getName());
    
    //通过组名称设置后台线程,表示该组的线程都是后台线程
    tg.setDaemon(true);
    • 自己设定线程组

    • 线程组的使用,默认是主线程组

    • ThreadGroup(String name) 创建线程组对象并给其赋值名字

    • 创建线程对象

    • Thread(ThreadGroup group, Runnable target, String name)

    • 设置整组的优先级或者守护线程

    • public final ThreadGroup getThreadGroup() 通过线程对象获取他所属于的组

    • public final String getName() 通过线程组对象获取他组的名字

    • Java中使用ThreadGroup来表示线程组,它可以对一批线程进行分类管理,java允许程序直接对线程组进行控制

    • 默认情况下,所有的线程都属于主线程组

    • 我们也可以给线程设置分组

    • 演示

资料 · 福利

回复 【Java】即可获取最新零基础Java视频资料

回复 【激活】即可获取IDEA、datagrip等系统激活方式

回复 【面试题】即可获取Java技术相关面试题

往期 · 精彩

专注分享Java技术,跟我一起学习吧

长按识别二维码关注

d625c0f110df68f4945f46af0a57af01.png

99432dbf76076215aeed9784dde9e873.jpeg

Java多线程编程详解 Java 的多线程编程为开发高效并发程序提供了强大的支持。从线程的创建、生命周期管理,到线程同步与通信,再到线程池的使用,每个环节都有相应的工具和方法。掌握这些知识不仅能提高程序的执行效率,还能有效地解决复杂的并发问题。希望这篇文章能帮助你更好地理解 Java 多线程编程。如果有任何问题或进一步的讨论,欢迎随时交流。本文已收录于,我的技术网站,有大厂完整面经,工作技术,架构师成长之路,等经验分享。 阅读详情

相关推荐

JAVA多线程之线程间的通信方式

一,介绍 本总结我对于JAVA多线程中线程之间的通信方式的理解,主要以代码结合文字的方式来讨论线程间的通信,故摘抄了书中的一些示例代码。 二,线程间的通信方式 ①同步 这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信。 参考示例: 由于线程A和线程B持有同一个MyObject类的对象object,尽管这两个线程需要调用不同的方法,但是它...

KHOST的博客 1303

Java 多线程中的通信机制

隐式锁:避免了手动加锁和释放锁。可重入锁:避免了死锁。简单易用:实现起来较为简单方便。不够灵活:加锁粒度过大。效率过低:相较于显示锁,synchronized 效率过低。不可中断:其他处于 BLOCKED 状态中的线程必须要等待锁的释放才可以被中断。

2401_82656016的博客 1467

通信编程之java socket【二】-持续通信和多线程通信

上一节讲到java socket的服务端和客户端的简单通信,了解到socket的通信机制,详见:通信编程之java socket初探 今天我们继续深入一下,之前的例子有一个问题,就是只能发送一次消息就结束了,我们知道微信、QQ都是持续的收发消息的,那我们怎么才能使客户端持续的发送消息呢?下面我们就来实战探讨下。 一、java socket怎么持续通信 socket的服务端是阻塞式的通信的,通过accept()方法来阻塞,等待客户端的连接,连接后客户端发送消息,通过IO来收发消息。从这个流程上来看,我们

m0_66123161的博客 1827

Java多线程基础知识总结

<-----------------------------------------廖雪峰学Java-----------------------------------------> 目录1. 多线程基础知识2. 创建多线程3. 线程状态4. 中断线程5. 守护线程6. 线程同步7. 同步方法8. 死锁9. 使用wait和notify10. 使用ReentrantLock11. 使用Condition12. 使用ReadWriteLock13. 使用StampedLock14. 使用Concu

Pinkgranite86的博客 2721

【Java篇】多线程详解

Java系统在语言层次上对多线程直接提供支持,多线程的主要目的是将一个程序中的各个程序段并发化,在在通常情况下,Java程序各部分是按顺序一次执行的,由于某种原因,需要将这些按顺序执行的程序段转化为并发执行,每个程序段在逻辑上是相互完整的代码段。实际上,在单处理器上,同一时刻只能执行一个代码,但是在同一时间段内,这些代码交替执行,所谓的“微观串行,宏观并行”。...

zhangxia_的博客 1万+

Java入门-第十二篇 多线程的同步与通信

在多线程编程中,当多个线程同时访问共享资源时,可能会引发一系列问题。为了确保程序的正确性和稳定性,我们需要使用线程同步机制来协调线程间的操作,并且通过线程间通信机制让线程之间能够有效地协作。

无 1122

【JAVA-Day80】多线程通信

在 Java 开发中,多线程通信是一项至关重要的技术。通过多线程通信,不同的线程可以有效地交换信息和协调任务,从而提高程序的效率和性能。本篇博客将深入探讨多线程通信的概念、实现方法、应用场景以及常见面试题,帮助读者更好地理解和应用多线程编程。多线程是指在同一时间内,多个线程同时执行不同的任务。相比于单线程程序,多线程程序能够更充分地利用 CPU 资源,提高程序的并发性和响应性。在 Java 中,可以通过Thread类或者实现Runnable接口来创建和管理线程。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 2万+

Java多线程Socket通信实战

本文还有配套的精品资源,点击获取 简介:小型socketDemo是一个使用Java Swing构建的图形用户界面应用程序,用于展示客户端与服务器间的Socket通信。通过使用Java的Socket类和ServerSocket类,该示例演示了多线程环境下处理多个客户端连接的能力。同时,它还解释了Socket通信的基本原理,包括服务器监听、客户端连接请求的处理,以及数据交换的机...

weixin_42400643的博客 1751

Java多线程间的通信

Java多线程间的通信   Java还提供了一种线程间通信的机制,这种通信通什么实现? wait,notify等机制   或使用pipeInputStream和pipeOutputStream    1. 线程的几种状态 线程有四种状态,任何一个线程肯定处于这四种状态中的一种: 1) 产生(New):线程对象已经产生,但尚未被启动,所以无法执行。如通过new产生了一个线程对象后没

it_man的专栏 2万+

FOFA奇技淫巧:从搜索语法到实战场景的深度挖掘

本文深入探讨了FOFA搜索语法在网络空间测绘中的高效应用,从基础语法到实战场景的深度挖掘。通过渗透测试、威胁狩猎、资产发现等实际案例,展示了如何利用FOFA精准定位目标系统、识别蜜罐、追踪威胁,并提供了合规使用指南和性能优化技巧,助力安全工作者提升效率。

weixin_32428571的博客 235

单片机欠压保护、欠压复位的用法及作用

一. 前言 使用编程环境 :KEIL mdk4 单片机 : NRF24LE1   二. 分析 查询各开发芯片的数据手册,一般在电源管理或者复位设置章节中。以下NRF24LE1为例: Power supply supervisor(电源监控): 电源主管在开机时对系统进行初始化,对即将发生的情况提供预警当电源电压过低而不能安全运行时,系统处于复位状态。 电源管理框图如下:   ...

城南花已开的博客 8401

【Java】详解多线程通信

本文主要讲解了多线程的由来、成员方法、案例讲解及注意事项。

2301_80760873的博客 1004

别再魔改LWIP了!用STM32CubeMX配置F407的TCP保活(KeepAlive)与自动重连

本文详细介绍了如何通过STM32CubeMX配置STM32F407的LWIP协议栈,实现TCP保活(KeepAlive)与自动重连功能,解决网络异常断开问题。文章提供了从基础环境配置到自动重连架构设计的完整指南,帮助开发者构建高可靠的网络连接机制,适用于工业物联网和嵌入式设备开发。

weixin_27038245的博客 234

Java多线程及通信方式详解

在讨论这个问题之前,首先要知道什么是Java多线程,我们拿个生活中的例子来说,例如在手机上使用软件,你可以同时运行多个应用程序或功能。你可以同时打开浏览器、音乐播放器和社交媒体应用。每个应用程序都在后台独立运行,就像多线程能够同时执行多个任务一样。但是有时候你需要等待某些操作完成才能继续进行。比如当你在等待一个应用加载数据时,你可以同时切换到另一个应用。但是直到数据加载完成,你才能够进行下一步操作。这种等待和切换类似于多线程中的线程间同步和等待操作。

EverythingAtOnce的博客 1789

国产麒麟系统下Kettle安装避坑指南:解决aarch64架构不支持问题

本文详细解析了在国产麒麟系统上部署Kettle时遇到的aarch64架构不支持问题,提供了从获取适配的SWT库、修改启动脚本到生产环境调优的完整解决方案。文章重点解决了ARM架构与Java GUI工具的兼容性挑战,并分享了内存配置、字体显示及Carte服务部署等实战经验,助力用户在国产化环境中稳定运行ETL流程。

weixin_29197835的博客 559

中兴SDH设备开局及业务配置

中兴SDH设备开局及业务配置 1.设备开局(S200-----S325) A.开电之后,按住截铃(bell off)开关,直至NCP告警灯变成橙色; B.此时,设备进入Download状态,设备IP为:192.192.192.11/24; 2.用交叉线(568A)将设备的QX口连接至电脑,电脑配置和设备相同网段的IP信息; 3.在电脑上测试连通性:pin...

weixin_33897722的博客 3996

多线程(十二)线程是如何通信的?

什么是线程之前的通信? 多线程之前的通信,其实就是多个线程在操作同一个资源,但是操作动作不同 如图所示 多线程之间通讯需求 需求如下:第一个线程写入(input)用户,另一个线程读取(out)用户,实现读一个,写一个操作。 源码如下:源码中包含着线程安全的解决方法 wait和notify的用法 package com.zuojie; /** * 共享资源 * @author zuojie ...

佐杰的博客 1231

【JTAG】1500协议详解

随着集成电路的规模不断扩大,1149.1的板级测试无法满足要求越来越高的芯片测试需求。芯片规模变大后,测试需求不在是一次测试整片芯片,而是芯片分为好几个区域去测试,而1500协议正是对1149.1在该方面的一个补充即1149.1主要测试板级间的互连,而1500用来测试芯片内不同core之间的互连。IEEEStd1500已经为包含不同模块的集成电路(ICs)开发了一种可测试性设计标准方法。............

xuhe0206的博客 7018

java多线程与线程间通信

本文学习并总结java多线程与线程间通信的原理和方法,内容涉及java线程的众多常见重要知识点,学习后会对java多线程概念及线程间通信方式有直观清晰的了解和掌握,可以编写并分析简单的多线程程序。 进程与线程 进程:是一个正在执行的程序。 每一个进程执行都有执行顺序,一个执行顺序是一个执行路径,或者叫控制单元; 每一个程序启动时,都会在内存中分配一片空间,进程就用于标识这片空间,并

jerrying0203的专栏 1万+

基于Gurobi的综合能源系统运行优化:鲁棒两阶段优化方法

本文提出了一种基于Gurobi的综合能源系统鲁棒两阶段优化方法,针对包含换电站、光伏发电和电池储能的系统运行问题。研究采用多面体不确定性集合描述光伏出力随机性,构建了考虑电池衰减成本和弃光惩罚的两阶段优化模型:第一阶段制定日前调度计划,第二阶段处理实时运行中的不确定性。通过列与约束生成算法求解模型,并使用Python和Gurobi实现。仿真验证了该方法能有效平衡系统经济性与鲁棒性,为含高比例可再生能源的综合能源系统运行提供了实用解决方案。

huanghm88的专栏 240

【100%通过率】2024华为OD机试真题E卷 C++语言 实现【流浪地球】

流浪地球计划在赤道上均匀部署了N个转向发动机,按位置顺序编号为0~N-1。 1) 初始状态下所有的发动机都是未启动状态; 2) 发动机起动的方式分为“手动启动”和“关联启动”两种方式; 3) 如果在时刻1一个发动机被启动,下一个时刻2与之相邻的两个发动机就会被“关联启动”; 4) 如果准备启动某个发动机时,它已经被启动了,则什么都不用做; 5) 发动机0与发动机N-1是相邻; 地球联合政府准备挑选某些发动机在某些时刻进行“手动启动”,当然最终所有的发动机都会被启动。 哪些发动机最晚被启动呢?

MISAYAONE的博客 4209

Java中TCP通信以及多线程通信

回顾Java多线程在Socket通信中的使用 一、Java中socket编程 socket = IP + 端口号,构成了在网络上唯一能被识别的标识符套接字。 通信的client和server双方都要获取对方的socket才能进行通信,socket之间的通信就是网络通信。 socket之间就是普通的IO流传输。 这篇主要回顾TCP通信,也就是基于字节流的网络传输。 二、一般的单线程socket通信 建立连接的几个步骤: server 端声明 ServerSocket ,然后调用accept() 方法

PanicJaw的博客 678

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java多线程基础知识

1. 程序、进程、线程 程序(program)是为完成特定任务、用某种语言编写的一组指令的集合,指一段静态的代码,是静态对象。 进程(process)是程序的一次执行过程,或是正在运行的一个程序,是一个动态的过程。进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域。 线程(thread)是一个程序内部的一条执行路径。线程作为调度和执行的基本单位。 进程调度算法: 先到先服务 短作业优先 时间片轮转 优先级调度 多级反馈队列(既能使高优先级的作业得到响应,又能使短作业进程迅速完成。)

rrq_0324的博客 939

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java 多线程通信方式及实现方法

多线程交互

qq_37614659的博客 1891

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: Java基础知识(十一)--多线程
下一篇: Java基础知识(十三)--线程池
新时代Java农民工
博客等级 码龄7年 16粉丝 116原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值