Java并发编程基础

2017-12-27  本文已影响18人  begonia_rich

具体的Thread提供的方法就不介绍了,这里会介绍线程状态,并发涉及到的相关组件以及等待通知模型

线程的状态

线程的状态

需要注意等待状态与阻塞状态的区别,分别是进入等待队列同步队列(后面会详细讲述这里的实现部分,个人理解锁的核心就是这俩队列)

synchronized关键字:保证了线程访问的可见性和排他性

对象,监视器,同步队列,执行线程的关系

正确的理解关系才能更好的理解实现。理清楚对象,监视器,同步队列,执行线程的关系才能更好的深入实现部分理解
线程获取监视器对象成功则正常访问,失败则进入同步队列


等待/通知机制

它是基于同步机制提供了等待队列的模式,其目的是为了确保等待线程从wait()方法返回时能够感知到通知线程对变量做出的修改

有以下细节需要注意

等待通知的经典范式

等待方遵循如下原则。

对应的伪代码如下。

synchronized(对象) {
     while(条件不满足) {
          对象.wait();
     }
     // 对应的处理逻辑
}

通知方遵循如下原则。

对应的伪代码如下。

synchronized(对象) {
     // 改变条件
     对象.notifyAll();
}

这个经典范式适用情况太多了

稍微改编一下就可以变为等待超时模型

synchronized(对象) {
     long future = System.currentTimeMillis()+mills;
     long wait = mills;
     while(条件不满足 && wait>0) {
          对象.wait();
          wait = future - System.currentTimeMillis()();
     }
     // 对应的处理逻辑
}

依托于等待通知模型可以典型的构建模型有

阻塞队列(ArrayBlockedQueue(以ArrayList做中心),LinkedBlockedQueue(以LinkedList做中心))(这里还是很有价值的,下面会详细的介绍)
数据库连接池(以池对象作为中心)
线程池技术(以job队列作为中心,实际中是直接使用阻塞队列实现的)

其他

这里需要注意这个等待通知模型,它真的太屌了,后面介绍的锁的实现部分会深入的介绍等待队列,同步队列。如果没有很好的理解等待通知模型,那看实现部分感觉有点不切实际。还有WaitNotify运行过程那个图也是很好能理解等待队列,同步队列

上一篇 下一篇

猜你喜欢

热点阅读