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线程间通信-回调的实现方式

    Java线程间通信-回调的实现方式   Java线程间通信是非常复杂的问题的.线程间通信问题本质上是如何将与线程相关的变量或者对象传递给别的线程,从而实现交互.   比如举一个简单例子,有一个多线程的 ...

  2. Java线程间通信之wait/notify

    Java中的wait/notify/notifyAll可用来实现线程间通信,是Object类的方法,这三个方法都是native方法,是平台相关的,常用来实现生产者/消费者模式.我们来看下相关定义: w ...

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

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

  4. Java——线程间通信

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  5. 说说Java线程间通信

    序言 正文 [一] Java线程间如何通信? 线程间通信的目标是使线程间能够互相发送信号,包括如下几种方式: 1.通过共享对象通信 线程间发送信号的一个简单方式是在共享对象的变量里设置信号值:线程A在 ...

  6. 说说 Java 线程间通信

    序言 正文 一.Java线程间如何通信? 线程间通信的目标是使线程间能够互相发送信号,包括如下几种方式: 1.通过共享对象通信 线程间发送信号的一个简单方式是在共享对象的变量里设置信号值:线程A在一个 ...

  7. java线程间通信1--简单实例

    线程通信 一.线程间通信的条件 1.两个以上的线程访问同一块内存 2.线程同步,关键字 synchronized 二.线程间通信主要涉及的方法 wait(); ----> 用于阻塞进程 noti ...

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

    管道流PipeStream是一种特殊的流,用于在不同线程间直接传送数据,而不需要借助临时文件之类的东西. jdk中提供了四个类来使线程间可以通信: 1)PipedInputStream和PipedOu ...

  9. Java——线程间通信问题

     wait和sleep区别: 1.wait可以指定时间可以不指定.     sleep必须指定时间. 2.在同步时,对cpu的执行权和锁的处理不同.     wait:释放执行权,释放锁.     ...

  10. Java线程间通信

    1.由来 当需要实现有顺序的执行多个线程的时候,就需要进行线程通信来保证 2.实现线程通信的方法 wait()方法: wait()方法:挂起当前线程,并释放共享资源的锁 notify()方法: not ...

随机推荐

  1. CSS_圣杯布局和双飞翼布局

    参考: 圣杯布局的来历是2006年发在a list part上的这篇文章: http://alistapart.com/article/holygrail 双飞翼布局介绍-始于淘宝UED: http: ...

  2. 新浪实时股票数据接口http://hq.sinajs.cn/list=股票代码

    股票数据的获取目前有如下两种方法可以获取: 1. http/JavaScript接口取数据 2. web-service接口 1.http/JavaScript接口取数据1.1Sina股票数据接口以大 ...

  3. poj2976 Dropping tests(01分数规划 好题)

    https://vjudge.net/problem/POJ-2976 又是一波c++AC,g++WA的题.. 先推导公式:由题意得 Σa[i]/Σb[i]<=x,二分求最大x.化简为Σ(a[i ...

  4. react_app 项目开发

    react_app 项目开发 npm install -g create-react-app npm root -g        // 查看安装包位置 创建项目 create-react-app m ...

  5. tp5.0与mysql存储过程

    存储过程是一组预编译的sql语句,只需要创建一次过程,以后在程序中就可以调用该过程任意次,执行的速度快于普通sql语句,对于没有权限执行存储过程的用户,也可授权他们执行存储过程,存储过程是保存在数据库 ...

  6. Laravel项目部署上线(阿里云 Ubuntu 16.04)

    第一次尝试把本地的项目上线,   购买了某云的轻量应用服务器, 镜像为Ubuntu 16.04  直接运行 apt-get install nginx 出错   根据提示运行 apt-get upda ...

  7. Myeclipse的使用技巧

    1.1.MyEclipse自定义注释   一.修改进入路径:  Window->Preference->Java->Code Style->Code Template-> ...

  8. MyOD-Linux od命令的实现

    MyOD 一.设计思路 确定MyOD的要求 根据需求可知MyOD需要实现类似Linux下 od -tx -tc XXX的功能,于是先去网上查找了一下od命令的-tx以及-tc参数的作用,经查找后了解到 ...

  9. 自动化测试如何使用driver.findElements去操作页面元素

    当你要操作的元素页面有很多个的时候,如下图这样,你想使用".datagrid-row-expander.datagrid-row-expand"这个cssSelector,这个时候 ...

  10. 如何用anysend发wirshark的报文

    可以复制 抓包的的报文的 hex txt文档  粘贴到 anysend 继续发送