前言 在Java 1.5之前,Java语言提供的唯一并发语言就是管程,Java 1.5之后提供的SDK并发包也是以管程为基础的。除了Java之外,C/C++、C 等高级语言也都是支持管程的。 那么什么是管程呢? 见名知意,是指管理共享变量以及对共享变量操作的过程,让它们支持并发。翻译成Java领域的 ...
分类:
编程语言 时间:
2020-01-28 21:07:16
阅读次数:
93
前言 Java的多线程是一把双刃剑,使用好它可以使我们的程序更高效,但是出现并发问题时,我们的程序将会变得非常糟糕。并发编程中需要注意三方面的问题,分别是安全性、活跃性和性能问题。 安全性问题 我们经常说这个方法是线程安全的、这个类是线程安全的,那么到底该怎么理解线程安全呢? 要给线程安全性定一个非 ...
分类:
编程语言 时间:
2020-01-28 09:17:14
阅读次数:
66
Java并发关键字Volatile 详解 问题引出: 1.Volatile是什么? 2.Volatile有哪些特性? 3.Volatile每个特性的底层实现原理是什么? 相关内容补充: 1. 缓存一致性协议:MESI ? 由于计算机储存设备(硬盘等)的读写速度和CPU的计算速度有着几个数量级别的差距 ...
分类:
编程语言 时间:
2020-01-25 18:07:50
阅读次数:
81
前言 在前篇介绍 "死锁" 的文章中,我们破坏等待占用且等待条件时,用了一个死循环来获取两个账本对象。 我们提到过,如果apply()操作耗时非常短,且并发冲突量也不大,这种方案还是可以。否则的话,就可能要循环上万次才可以获取锁,这样的话就太消耗CPU了! 于是我们给出另一个更好的解决方案, 等待 ...
分类:
编程语言 时间:
2020-01-24 12:01:17
阅读次数:
118
概要 JDK中提供ArrayList集合方便我们对集合内元素进行增删改查,但是ArrayList为了能够在单线程中快速进行操作其设计并不支持多线程进行操作。ArrayList在多线程环境下可能会产生java.util.ConcurrentModificationException异常。而对于我们需要 ...
分类:
编程语言 时间:
2020-01-24 09:17:58
阅读次数:
81
CAS是什么? CAS的全称为Compare And Swap它是一条CPU并发原语,也就是在CPU硬件层面上来说比较并且判断是否设置新值这段操作是原子性的,不会被其他线程所打断。在JAVA并发包java.util.concurrent.atomic下底层所采用的就是利用CAS机制来避免进行并发计算 ...
分类:
编程语言 时间:
2020-01-24 00:32:08
阅读次数:
122
前言 我们使用加锁机制来保证线程安全,但是如果过度地使用加锁,则可能会导致死锁。下面将介绍关于死锁的相关知识以及我们在编写程序时如何预防死锁。 什么是死锁 学习操作系统时,给出死锁的定义为两个或两个以上的线程在执行过程中,由于竞争资源而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。简化一 ...
分类:
编程语言 时间:
2020-01-23 09:20:00
阅读次数:
68
Java并发编程小总结:CountDownLatch、CyclicBarrier和Semaphore这几个类都是在JUC下,也就是java.util.concurrent包下。这两天学习了一下并发编程中的三个类的使用和一些应用场景,所以做一下记录和总结,方便自己日后再查看复现。 1、CountDow ...
分类:
编程语言 时间:
2020-01-21 18:18:45
阅读次数:
99
控制台输出: 程序进程执行完毕,进程正常结束。 如果把代码中注释掉的部分放开,故意让new出来的线程跑的比main线程慢的话,控制台输出: 此时由于最后Thread-0线程一直处于await没有其他线程去唤醒了,程序进程会一直阻塞中。 最后,看一下lock.newCondition()的说明: Co ...
分类:
编程语言 时间:
2020-01-20 20:38:10
阅读次数:
82
1、什么是死锁 多线程以及多进程改善了系统资源的利用率并提高了系统的处理能力。然而,并发执行也带来了新的问题--死锁。 所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。 2、死锁产出的必要条件 以下这四个条件是死锁的必要条件,只要系统发生死锁,这些 ...
分类:
编程语言 时间:
2020-01-20 18:42:37
阅读次数:
57