Java-线程间通信小结
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-线程间通信小结的更多相关文章
- Java线程间通信-回调的实现方式
Java线程间通信-回调的实现方式 Java线程间通信是非常复杂的问题的.线程间通信问题本质上是如何将与线程相关的变量或者对象传递给别的线程,从而实现交互. 比如举一个简单例子,有一个多线程的 ...
- Java线程间通信之wait/notify
Java中的wait/notify/notifyAll可用来实现线程间通信,是Object类的方法,这三个方法都是native方法,是平台相关的,常用来实现生产者/消费者模式.我们来看下相关定义: w ...
- java线程间通信:一个小Demo完全搞懂
版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程系列文章只是自己知识的总结梳理,都是最基础的玩意,已经掌握熟练的可以绕过. 一.从一个小Demo说起 上篇我们聊到了Java多线程的同步 ...
- Java——线程间通信
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- 说说Java线程间通信
序言 正文 [一] Java线程间如何通信? 线程间通信的目标是使线程间能够互相发送信号,包括如下几种方式: 1.通过共享对象通信 线程间发送信号的一个简单方式是在共享对象的变量里设置信号值:线程A在 ...
- 说说 Java 线程间通信
序言 正文 一.Java线程间如何通信? 线程间通信的目标是使线程间能够互相发送信号,包括如下几种方式: 1.通过共享对象通信 线程间发送信号的一个简单方式是在共享对象的变量里设置信号值:线程A在一个 ...
- java线程间通信1--简单实例
线程通信 一.线程间通信的条件 1.两个以上的线程访问同一块内存 2.线程同步,关键字 synchronized 二.线程间通信主要涉及的方法 wait(); ----> 用于阻塞进程 noti ...
- java线程间通信之通过管道进行通信
管道流PipeStream是一种特殊的流,用于在不同线程间直接传送数据,而不需要借助临时文件之类的东西. jdk中提供了四个类来使线程间可以通信: 1)PipedInputStream和PipedOu ...
- Java——线程间通信问题
wait和sleep区别: 1.wait可以指定时间可以不指定. sleep必须指定时间. 2.在同步时,对cpu的执行权和锁的处理不同. wait:释放执行权,释放锁. ...
- Java线程间通信
1.由来 当需要实现有顺序的执行多个线程的时候,就需要进行线程通信来保证 2.实现线程通信的方法 wait()方法: wait()方法:挂起当前线程,并释放共享资源的锁 notify()方法: not ...
随机推荐
- Spring 使用 feign时设置header信息
最近使用 SpringBoot 项目,把一些 http 请求转为 使用 feign方式.但是遇到一个问题:个别请求是要设置header的. 于是,查看官方文档和博客,大致推荐两种方式.也可能是我没看明 ...
- C++类中的Static关键字
静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问,而静态成员函数可不建立对象就可以被使用. 或者说静态函数与一般函数没有太大的区别,只是访问有限制,静态变量跟一般的全局变量的区别 ...
- Mac 比较实用的软件
解压缩 BetterZip 系统 CleanMyMac Quicksilver Alfred3 视频 Movist
- nregistering JMX-exposed beans
https://blog.csdn.net/yang474231561/article/details/81738632 https://stackoverflow.com/questions/507 ...
- Linux - ansible 安装
# 安装依赖 yum install rpm-build python2-devel sshpass PyYAML python-jinja2 python-paramiko python-six p ...
- luogu4643 [国家集训队]阿狸和桃子的游戏
题目链接:洛谷 这道题乍一看非常的难,而且题目标题上的标签让人很害怕. 但其实这道题并不难写(只要想到了...emm) 因为我们只需要知道两个人得分之差,所以我们可以对条件进行变换. 我们将边权平分到 ...
- python中字符串的拼接
1.+ 号 2.format() 3.f"{username}登录成功" 4.%s 5.列表中的 join 6.逗号 http://www.cnblogs.com/gengcx/p ...
- windows下安装Mongodb的方法
参考:https://blog.csdn.net/heshushun/article/details/77776706
- JDBC(Java Data Base Connectivity,java数据库连接)
JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言 ...
- 安卓系统广播暴露设备信息-Android System Broadcasts Expose Device Information
Android device details are being exposed to running applications via Wi-Fi broadcasts in the mobile ...