博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java-线程间通信小结
阅读量:6438 次
发布时间:2019-06-23

本文共 1033 字,大约阅读时间需要 3 分钟。

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解决的是变量在不同线程间的隔离性,也就是不同线程拥有自己的值。

转载地址:http://qhzwo.baihongyu.com/

你可能感兴趣的文章
hihoCoder1353 满减优惠
查看>>
js/jquery判断浏览器的方法总结
查看>>
【SICP练习】138 练习3.69
查看>>
【Unity】7.6 自定义输入
查看>>
有关sublime的一些使用
查看>>
数据库连接池的实现及原理
查看>>
练习、C# 结构体、冒泡排序
查看>>
Three things everyone should know to improve object retrieval
查看>>
[BZOJ 1076][SCOI2008]奖励关(期望+状压Dp)
查看>>
3.2Python的循环结构语句:
查看>>
01LaTeX学习系列之---TeX的介绍与认识
查看>>
希尔排序
查看>>
Excel Oledb设置
查看>>
51nod 正整数分组
查看>>
caioj 1066 动态规划入门(一维一边推4:护卫队)(分组型dp总结)
查看>>
环美亚二十年装修师傅分享,甲醛的八种来源
查看>>
Jquery.tmpl
查看>>
HDU 5878 I Count Two Three
查看>>
自定义View,圆形头像
查看>>
SpringMVC的Controller
查看>>