摘要:1.Condition简介 任何一个java对象都天然继承于Object类,在线程间实现通信的往往会应用到Object的几个方法,比如wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll()几个方法实现等 阅读全文
10.彻底理解ReentrantLock
2019-02-08 19:26 by xiaok1024, 341 阅读, 0 推荐, 收藏, 编辑
摘要:1. ReentrantLock的介绍 ReentrantLock重入锁,是实现Lock接口的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞。在java关键字synchronized隐式支持重入性(关于synchroni 阅读全文
7.三大性质总结:原子性、可见性以及有序性
2019-02-08 19:25 by xiaok1024, 478 阅读, 0 推荐, 收藏, 编辑
摘要:1. 三大性质简介 在并发编程中分析线程安全的问题时往往需要切入点,那就是两大核心:JMM抽象内存模型以及happens-before规则(在这篇文章中已经经过了),三条性质:原子性,有序性和可见性。关于synchronized和volatile已经讨论过了,就想着将并发编程中这两大神器在 原子性, 阅读全文
8.初识Lock与AbstractQueuedSynchronizer(AQS)
2019-02-08 19:25 by xiaok1024, 354 阅读, 0 推荐, 收藏, 编辑
摘要:1. concurrent包的结构层次 在针对并发编程中,Doug Lea大师为我们提供了大量实用,高性能的工具类,针对这些代码进行研究会让我们对并发编程的掌握更加透彻也会大大提升我们队并发编程技术的热爱。这些代码在java.util.concurrent包下。如下图,即为concurrent包的目 阅读全文
9.深入理解AbstractQueuedSynchronizer(AQS)
2019-02-08 19:25 by xiaok1024, 246 阅读, 0 推荐, 收藏, 编辑
摘要:1. AQS简介 在上一篇文章中我们对lock和AbstractQueuedSynchronizer(AQS)有了初步的认识。在同步组件的实现中,AQS是核心部分,同步组件的实现者通过使用AQS提供的模板方法实现同步组件语义,AQS则实现了对同步状态的管理,以及对阻塞线程进行排队,等待通知等等一些底 阅读全文
6.你以为你真的了解final吗?
2019-02-08 19:24 by xiaok1024, 403 阅读, 0 推荐, 收藏, 编辑
摘要:1. final的简介 final可以修饰变量,方法和类,用于表示所修饰的内容一旦赋值之后就不会再被改变,比如String类就是一个final类型的类。即使能够知道final具体的使用方法,我想对final在多线程中存在的重排序问题也很容易忽略,希望能够一起做下探讨。 2. final的具体使用场景 阅读全文
3.java内存模型以及happens-before规则
2019-02-08 19:23 by xiaok1024, 190 阅读, 0 推荐, 收藏, 编辑
摘要:1. JMM的介绍 在上一篇文章中总结了线程的状态转换和一些基本操作,对多线程已经有一点基本的认识了,如果多线程编程只有这么简单,那我们就不必费劲周折的去学习它了。在多线程中稍微不注意就会出现线程安全问题,那么什么是线程安全问题?我的认识是,在多线程下代码执行的结果与预期正确的结果不一致,该代码就是 阅读全文
4.彻底理解synchronized
2019-02-08 19:23 by xiaok1024, 402 阅读, 0 推荐, 收藏, 编辑
摘要:1. synchronized简介 在学习知识前,我们先来看一个现象: 开启了10个线程,每个线程都累加了1000000次,如果结果正确的话自然而然总数就应该是10 * 1000000 = 10000000。可就运行多次结果都不是这个数,而且每次运行结果都不一样。这是为什么了?有什么解决方案了?这就 阅读全文
5.彻底理解volatile
2019-02-08 19:23 by xiaok1024, 256 阅读, 0 推荐, 收藏, 编辑
摘要:1. volatile简介 在上一篇文章中我们深入理解了java关键字synchronized,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其中奥妙,我们来共同探讨下。 通过上一篇的文章我们了解到synchronized是阻塞式同步,在线程竞 阅读全文
2.线程的状态转换以及基本操作
2019-02-08 19:22 by xiaok1024, 327 阅读, 1 推荐, 收藏, 编辑
摘要:在上一篇文章中并发编程的优缺点谈到了为什么花功夫去学习并发编程的技术,也就是说我们必须了解到并发编程的优缺点,我们在什么情况下可以去考虑开启多个线程去实现我们的业务,当然使用多线程我们应该着重注意一些什么,在上一篇文章中会有一些讨论。那么,说了这么多,无论是针对面试还是实际工作中作为一名软件开发人员 阅读全文