![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程
Ascend2015
这个作者很懒,什么都没留下…
展开
-
Java并发编程(1)——并发成本和并发模型
1 并发编程的成本1.1 结构复杂一般而言多线程程序结构更为复杂,线程之间的交互极为复杂,不正确的线程交互非常难以发现,并且重现以修复。1.2 上下文切换即使是单核CPU也能够执行多线程程序,CPU通过为线程分配时间片来支持多线程。所谓时间片,即是分配给每个线程的CPU运行时间。时间片非常短,因此在切换的过程中用户无法察觉,CPU通过时间片分配算法来循环执行任务,当前任务执行完...原创 2018-05-18 22:17:55 · 554 阅读 · 0 评论 -
Java并发编程(2)——线程安全
回顾上一篇中我们主要介绍了并发编程的成本:上下文切换导致的资源消耗、代码结构变得更为复杂,以及三种并发编程模型:并行工作者模型、流水线模型、函数式并行,我们详细介绍了三种模型的优缺点,但目前为止都还十分的抽象。 本篇我们主要会介绍临界区、竞态以及线程安全。1.竞态条件&临界区public class Counter { public long count = ...原创 2018-05-20 16:08:30 · 166 阅读 · 0 评论 -
Java并发编程(3)——线程通信
前言本来这章应该来讨论Java的内存模型,但我的博客里其实已经有了一篇,同样的内容再写一遍觉得怪怪的,所以这里就直接到线程之间的通信吧,如果有人需要看的话,连接在这里《深入理解JVM》,写得比较渣,其实都是为了加深自己记忆的,所以就比较敷衍。看不下去的自己找几篇看看问题不大,毕竟其实大家看的书差不多那内容也就差不多。线程通信线程通信的目的是为了使线程之间能够发送信号,也使得线程能够...原创 2018-05-21 20:52:50 · 201 阅读 · 0 评论 -
Java并发编程(5)——饥饿与公平
前言上一篇中我们说的主要问题是死锁发生的条件,以及应对死锁的一些解决方法,它们分别:加锁顺序、加锁时限以及死锁检测,其中死锁检测是最优的解决方法,它通过检查与目标锁相关的数据结构,查询在整个锁的关系图中,是否有某个线程正在等待当前线程持有的锁,以判断死锁是否发生。1. 饥饿1.1 定义所有CPU时间片被其它线程占据导致其中一个线程无法分配到CPU时间片的状态被称为饥饿(线程...原创 2018-05-29 19:40:58 · 411 阅读 · 0 评论 -
Java并发编程(4)——死锁
前言在上一篇中,我们介绍了线程通信的一些原理。包括使用共享对象进行通信、忙等待、Object的wait()/notify()/notifyAll()方法、自旋锁、管程对象的注意事项等等。我们需要重点记忆的事情是,wait()/notify()/notifyAll()这三个方法必须在同步代码块中调用,否则会抛出IllegalMonitorStateException异常,此外,不能将字符串常量或...原创 2018-05-24 22:34:27 · 202 阅读 · 0 评论 -
Java并发编程(6)——嵌套管程锁死
前言其实到上一篇我对前面的东西就开始有点迷了,但是拖着也没有卵用,所以进度还是要继续赶的,所以就继续往下看。内容上来说,上一篇描述了什么是饥饿:所有CPU时间片段被其他线程所占据,导致其中某一个线程得不到CPU资源的状态。引发饥饿的原因大致是三点:高优先级线程吞噬低优先级线程的CPU时间;线程永久阻塞在等待进入同步块;线程在等待一个永久处于等待状态的对象。解决方案是:使用锁代替同步块,使用公平...原创 2018-06-05 20:46:47 · 296 阅读 · 0 评论 -
Java并发编程(7)——Java中的锁
前言直接写第7篇的原因是锁是一个十分重要的概念,而管程嵌套锁死却并没有经常地出现在我所刷的面试题中。在前面的几篇中,我们也涉及到了简单的锁、公平锁的示例。这一篇中我们会更细致地来介绍锁。 和synchronized同步块一样,锁也是一种线程同步机制,但更为复杂,锁是基于synchronized同步块实现的,从Java5开始,java.util.concurrent.locks中实现了几种锁,...原创 2018-06-25 00:09:13 · 252 阅读 · 0 评论 -
Java并发编程(9)——信号量
前言Semaphore是一个线程同步结构,用于在线程之间传递信号以免出现信号丢失,或者像锁一样保护一个关键区域。Java5之后, java.util.concurrent中提供了Semaphore的实现,我们不再自行实现,而是了解其原理。1. 简单的Semaphore实现public class Semaphore{ private boolean signal=fal...原创 2018-06-28 21:40:08 · 294 阅读 · 0 评论