首页 > 编程语言 >Java中线程间有哪些通信方式?

Java中线程间有哪些通信方式?

时间:2023-09-27 13:32:09浏览次数:31  
标签:输出 Java Thread 关键字 线程 程间 join 中线 输入

Java中线程间有哪些通信方式?_通知机制

1、volatile和synchronized关键字

关键字volatile可以用来修饰字段(成员变量),就是告知程序任何对改变量的访问均需要从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问的可见性。

关键字synchronized可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程在同一个时刻,只能有一个线程处于方法后者同步块中,它保证了线程对变量访问的可见性和排他性。

2、等待/通知机制

可以通过Java内置的等待/通知机制(wait()/notify())实现一个线程修改一个对象的值,而另一个线程感知到了变化,然后进行相应的操作。

3、管道输入/输出流

管道输入/输出流和普通的文件输入/输出流或者网络输入/输出流不同之处在于,它主要用于线程之间的数据传输,而传输的媒介为内存。

管道输入/输出流主要包括如下4中具体实现:PipedOutputStream、PipedInputStream、 PipedReader和PipedWriter,前两种面向字节,而后两种面向字符。

4、使用Thread.join()

如果一个线程A执行了Thread.join()语句,其含义是:当前线程A等待thread线程终止之后采用thread.join()返回。

Thread除了提供join()之外还提供了join(long millis)和join(long millis,int nanos)两个具备超时特性的方法。

5、使用TheadLocal

ThreadLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值得存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上得一个值。

可以通过set()方法来设置值,在当前线程下再通过get方法来获取原先设置得值。

标签:输出,Java,Thread,关键字,线程,程间,join,中线,输入
From: https://blog.51cto.com/u_16269508/7623695

相关文章

  • Java中CornExpression说明
    关于cronExpression表达式有至少6个(也可能是7个)由空格分隔的时间元素,从左至右,这些元素约定义如下:1、秒(0~59)2、分(0~59)3、小时(0~23)4、月份中的日期(1-31)5、月份(1-12或JAN-DEC)6、星期中的日期(1-7或SUN-SAT)7、年份(1970-2099)eg:0010,14,16**?每天10点、14点、16点0015,30,45*......
  • java8基础镜像制作:基于官方镜像改编
    上次配完trivy之后,扫描java项目发现很多漏洞,具体分析了下,大部分居然是制作docker的基础镜像java:8造成的于是更新java8镜像就提上日程了,上dockerhub上看了下,最新版的java8镜像还是6年前。。无奈只能自己制作了,首先看一下当时java镜像的dockerfile ......
  • java使用标识符注意点
    标识符注意点所有的标识符都应该以字母(a-z/A-Z),美元符号($)或者下划线(_)开始.首字母之后可以用字母(a-z/A-Z),美元符号($)或者下划线(_)或数字的任何字符组合.不能使用关键字作为变量名或方法名标识符对大小写敏感,不能用错合法标识符演示:abc,$21,_dsa23非......
  • 基于Java开发的数字采购系统(供应商、询价、招标、订单送货)
    前言:随着互联网和数字技术的不断发展,企业采购管理逐渐走向数字化和智能化。数字化采购平台作为企业采购管理的新模式,能够提高采购效率、降低采购成本、优化供应商合作效率,已成为企业实现效益提升的关键手段。系统获取在文末。一、建设的必要性数字化采购平台是指利用互联网、......
  • 测试驱动技术(TDD)系列之3:详解Java数组
    在前面的文章中我介绍了如何通过junit4和TestNG实现参数化,这两种架构都通过二维数组来实现参数化,在这里我就给大家详细的介绍一下java数组。Junit4定义参数化数据,代码如下:publicstaticCollectionprepareData(){Object[][]object={{1,2,3},{0,2,2},{0,3,3}};returnArrays.as......
  • Java面向对象概念详解
    对象对象有两个层次的概念,现实生活中对象指的是可观世界的实体;而程序中对象就是一组变量和相关方法的集合,其中变量表明对象的状态,方法表明对象所具有的行为。可以将现实生活中的对象经过抽象,映射为程序中的对象,对象是对现实的高度抽象。类对象在程序中是通过一种抽象数据类型来描述......
  • Java String类的 equals、==和intern()
    Java实例的生成我们都知道,java中new一个类的实例是在JVM的堆中完成的,如下图所示:在这里我们以String类为例讲解一些更为细节的东西!String生成实例的代码如下:String str=new String("hello");对于通过new产生一个字符串(假设为” hello”)时,会先去上图的常量池中查找是否已经有了......
  • 详解如何使用VS code搭建JavaScript环境(适合小白)
    对于从事自动化测试的同学来说,有很多自动化测试项目是需要使用JavaScript脚本语言进行coding的,包括selenium、playwright、Puppeteer,那么选择哪种IDE合适呢?在这里我推荐visualstudiocode,即vscode!注意:本文介绍的是JavaScript在后端运行和调试的方法,并未涉及前端(浏览器)相关开发......
  • 「Java开发指南」在MyEclipse中的Spring开发(三)
    在上文中(点击这里回顾>>),我们介绍了如何管理多个Beans和项目、Spring配置编辑器等,本文将继续介绍AOP、WebFlow支持等,要持续关注哦~MyEclipsev2023.1.2离线版下载MyEclipse技术交流群:742336981欢迎一起进群讨论6.AOP支持BeansCrossReferences视图显示了所有被建议的beans......
  • Java多线程--Lesson03
    线程同步概念:线程同步指的是在多个线程操作同一资源时,需要通过线程排队和线程锁来约束这些线程,使得其可以对其资源完成同步并发指的是同一时间段内,有多个线程去操作同一个资源文件由于同一进程的多个线程共享一块空间资源,带来方便的同时也带来了冲突问题,为了保证数据在方法中......