并发编程篇:详细聊下线程间的通信

x33g5p2x  于2021-12-18 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(336)

volatile

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

synchronized

关键字synchronized可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程在同一时刻,只能有一个线程处于方法或者同步块中,保证线程对变量访问的可见性和排它性
对象、对象的监视器、同步队列和执行线程之间的关系

等待/通知机制

1、对待/通知的经典范式

等待方遵循的原则:

  1. 获取对象的锁
  2. 如果条件不满足,那么调用对象的wait()方法,被通知后需要检查条件
  3. 条件满足则执行对应的逻辑
    伪代码:
sychronized(对象) {
	while(条件不满足){
		对象.wait();
	}
	执行对应的逻辑
}

通知方遵循的原则

  1. 获取对象的锁
  2. 改变条件
  3. 通知对象上所有等待的线程
    伪代码:
sychronized(对象) {
	改变条件
	对象.notifyAll();
}

等待通知的运行过程

管道输入/输出

管道输入\输出流和普通文件输入\输出流或者网络输入\输出流不同之处在于,它用于线程之间的数据传输,而传输的媒介为内存
管道输入\输出流有4种:面向 字节的:PipedOutputStream、PipedIntputStream;面向字符的:PipedReader、PipedWriter

Thread.join()的使用

如果一个线程执行了thread.join(),它的含义是:当前线程A等待线程thread终止后才thread.join()返回

ThreadLocal的使用

ThreadLocal,即线程变量,是一个以ThreadLocal为对象为键、任意对象为值的存储结构,这个对象附带在线程上

欢迎关注公众号“程序员ZZ的源码”,一起来学习~~~

相关文章