1)方法wait的作用是使当前执行代码的线程进行等待,将当前线程置入预执行队列,并且在wait所在代码行处停止执行,直到接到通知或者中断。在wait之前,要获得一个对象锁,即wait只能在同步方法/块中使用,执行wait之后立即释放锁。wait状态不能被interrupt,会抛异常。

2)notify随机唤醒等待队列中等待同一共享资源的线程。notify也要获得一个对象锁,即notify也只能在同步方法/块中使用,执行notify之后,线程继续执行后面的代码,直到全部完成,才会释放锁。之后由线程规划器挑出一个等待状态的线程对其发出notify,并使其获得对象锁,让其执行wait之后的语句,再释放掉锁。

3)notifyAll唤醒所有等待的线程

4)wait(long)等待某一个时间内是否有线程对锁进行唤醒,如果超过这个时间就自动唤醒

5)生产者、消费者模式原来都是基于wait/notify原理

6)管道流pipeStream是一种特殊的流,用于在不同线程间直接传送数据。一个线程发送数据到输出管道,另一个线程从输入管道中读数据,通过使用管道,实现不同线程间的通信。Java提供了四个类来使线程间进行通信:PipedInputStream、PipedOutputStream、PipedReader、PipedWriter。使用方法:在外部定义一个PipedInputStream和一个PipedOutputStream,然后让PipedOutputStream连接(connect)PipedInputStream,然后将这两个流分别给到输入数据和输出数据的线程,两个线程之间就可以传输字节或者字符流了

7)join的作用是等待线程对象销毁。主线程创建子线程,若子线程耗时严重,主线程将会先于子线程完成。这时如果主线程想等待子线程执行完成之后再结束,比如获取子线程处理完成的数据,这时就用到了join。主线程启动子线程a,然后a.join就会一直阻塞在那,直到a运行完成

8)线程join时不能被interrupt,会抛异常;join(long)设置等待时间,结束后也会释放锁(但sleep不会释放锁)

9)ThreadLocal解决的是每个线程绑定自己的值,每个线程都可以执行ThreadLocal.set(object)将自己的值放入,再通过get()获取自己的值。ThreadLocal解决的是变量在不同线程间的隔离性,也就是不同线程拥有自己的值。

Java-线程间通信小结相关推荐

  1. Java线程间通信-回调的实现方式

    2019独角兽企业重金招聘Python工程师标准>>> Java线程间通信-回调的实现方式 Java线程间通信是非常复杂的问题的.线程间通信问题本质上是如何将与线程相关的变量或者对象 ...

  2. java线程间通信的方式

    java线程间通信的方式 1. 共享变量 2. 等待/通知 3. 管道流 1. 共享变量 volatile修饰的变量,线程间可见,可使用这种变量作为线程间传递消息的媒介: 延伸出来的,还有redis中 ...

  3. java线程间通信:一个小Demo完全搞懂

    版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程系列文章只是自己知识的总结梳理,都是最基础的玩意,已经掌握熟练的可以绕过. 一.从一个小Demo说起 上篇我们聊到了Java多线程的同步 ...

  4. java 线程间通信 handler_Handler不同线程间的通信

    转http://www.iteye.com/problems/69457 Activity启动后点击一个界面按钮后会开启一个服务(暂定为padService),在padService中会启动一个线程( ...

  5. java线程间通信_java线程间通信:一个小Demo完全搞懂

    版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程系列文章只是自己知识的总结梳理,都是最基础的玩意,已经掌握熟练的可以绕过. 一.从一个小Demo说起 上篇我们聊到了Java多线程的同步 ...

  6. JAVA线程间通信的几种方式

    今天在群里面看到一个很有意思的面试题: "编写两个线程,一个线程打印1~25,另一个线程打印字母A~Z,打印顺序为12A34B56C--5152Z,要求使用线程间的通信." 这是一 ...

  7. java线程间通信 实例_JAVA-初步认识-第十四章-线程间通信-示例

    一. 引言 之前讲述了线程的基本使用,卖票和存钱.卖票相当于把资源都释放出来,被别人获取到.而存钱,则是把数据都存进去. 现在,我们将线程进行了改变.以前是多个线程在执行同一个动作,无论是继承还是实现 ...

  8. java线程间通信管道_通过管道进行线程间通信

    管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据.一个线程发送数据到输出管道,另一个线程从输入管道中读数据.通过管道,实现不同线程间的通信,而无须借助类似共享变量.临时文件之 ...

  9. java 线程间通信的几种方式

    1.如何让两个线程依次执行 假设有两个线程,一个线程A,一个线程B,两个线程分别依次打印 1-3 三个数字即可. package Test;/** /*** @author Administrator ...

  10. Java 线程间通信

    ⭐写在前面⭐

最新文章

  1. 第一次做安卓项目使用的开源框架列表
  2. Spring4.X系列之AOP基础篇
  3. graphpad如何做x轴在上方的图_数据分析最有用的25个 Matplotlib图
  4. APP安全环节缺失,手游运营商怎样应对APP破解困境
  5. android布局优化 工具,详解Android布局优化
  6. unity DOTS的学习总结之Job System
  7. 大一报了c语言班要买电脑吗,少儿编程课程要自己买电脑吗
  8. 用 Go 构建一个区块链 -- Part 1: 基本原型
  9. 30 万奖金悬赏 | CSDN 软件开发精英赛即日启动
  10. python基本操作(四)
  11. Android apk如何加固防止被破解(防止逆向编译)
  12. groovy学习(四)io
  13. http协议中的keeplive是做什么的?它的适应场景是什么?
  14. JDK-8u131 软件安装教程
  15. 班级网页制作 HTML个人网页设计 我的班级网站设计与实现 大学生简单班级静态HTML网页设计作品 DIV布局班级网页模板代码 DW学生校园网站制作成品下载
  16. 开源MySQL数据仓库解决方案:Infobright
  17. snap 无法卸载_你手机里有哪些不想卸载的良心 App?
  18. 常见的文件头信息对照表
  19. [整理] 如何学习插画,美术等
  20. Android常用RGB值以及中英文名称

热门文章

  1. Micropython教程之TPYBoard制作蓝牙+红外循迹小车
  2. 搭建高吞吐量 Kafka 分布式发布订阅消息 集群
  3. 【机器学习】粗糙集属性约简算法与mRMR算法的本质区别
  4. 伪元素::before与::after的用法
  5. GitHub上创建组织
  6. 1 第一次画PCB总结
  7. vim配置文件~/.vimrc
  8. Java中的引用类型(强引用、弱引用)和垃圾回收
  9. WebView实例开发之人人网Oauth2认证
  10. 刚学会 HTML5 不久,最近用 CSS3 实现了热点地图动画