
java并发
文章平均质量分 59
宫城诗
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
20210716——Java并发编程的艺术 第三章 Java内存模型
并发编程模型的两个关键问题 在并发编程中,需要处理两个关键问题:线程之间如何通信以及线程之间如何同步。在命令式编程中,线程之间的通信机制有两种:消息传递和共享内存 同步是指程序中用于控制不同线程间操作发生相对顺序的机制,在共享内存并发模型里,同步是显示进行的。程序员必须显示指定某个方法或某段代码需要在线程之间互斥执行。在消息传递的并发模型中,由于消息的发送必须在消 ,息的接受之前,因此同步是隐式进行的。 Java内存模型的抽象结构 在java中,所有实例域、静态域和数组元素都存储在堆内存中,堆内存在线程之间原创 2021-07-16 19:23:51 · 173 阅读 · 0 评论 -
20210714——Java并发编程的艺术 第二章 Java并发机制的底层实现原理
Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM中,JVM执行字节码,最终需要化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令 volatile的使用原创 2021-07-16 13:56:34 · 168 阅读 · 0 评论 -
20210714——Java并发编程的艺术 第一章 并发编程的挑战
上下文切换 单核处理器也支持多线程执行代码,cpu通过给每个线程分配CPU时间片来实现这个机制,时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU需要不停的切换线程执行,让我们感觉多个线程是同时进行的,时间片一般是几十毫秒。 cpu通过时间片分配算法来循环执行任务,当任务执行一个时间片后会切换到下一个任务,但是切换前会保存上一个任务的状态,以便下次切换回这个任务,可以加载这个任务的状态,所以任务从保存再到加载的过程是一次上下文切换。 多线程一定快么 从数据可以看到,当并发执行累加操作不超过百万原创 2021-07-14 21:06:01 · 122 阅读 · 0 评论 -
20200630——线程
线程的五种状态 1)新建 new 2)可运行runnable 3)运行 running 4)阻塞 blocked 阻塞的情况分为三种 调用wait()方法,把线程放入等待队列 获取锁的时候,被阻塞了,其他线程拿到锁 io阻塞,sleep和join,jvm把线程设置为阻塞,等其相应的任务完毕,又重新回到runnable状态 5)死亡 dead 线程流程图 ...原创 2020-06-30 23:26:27 · 216 阅读 · 0 评论 -
20200422——线程池 参数设计分析
什么是线程池 线程池是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后创建线程后自动启动这些任务。这里的线程就是我们在前面学过的线程,这里的任务就是实现了Runnale和Callable接口的实例对象。 为什么使用线程池 使用线程池的最大原因是可以根据系统的需求和硬件环境灵活的控制线程数量,且可以对所有线程进行统一的控制和管理,从而提高系统的运行效率,降低系统运行运行压力,使用线程池的原...原创 2020-04-23 16:21:28 · 195 阅读 · 0 评论 -
20200407——java并发 volatile 九
CPU 高速缓存 线程是 CPU 调度的最小单元,线程涉及的目的最终仍然是更充分的利用计算机处理的效能,但是绝大部分的运算任务不能只依靠处理器“计算”就能完成,处理器还需要与内存交互,比如读取运算数据、存储运算结果,这个 I/O 操作是很难消除的。而由于计算机的存储设备与处理器的运算速度差距非常大,所以现代计算机系统都会增加一层读写速度尽可能接近处理器运算速度的高速缓存来作为内存和处理器之间的缓冲...原创 2020-04-07 13:48:21 · 164 阅读 · 2 评论 -
20200407——java并发 偏向锁和重量级锁 八
踩坑误区 不管是synchronize用在对象或者类对象中,最后是在方法中。都是对对象加锁。获取他的实例方法。 1.6之前 之前的synchronized都是重量级锁,1.6改良了 ,先是偏向锁到轻量级锁,到最后的重量级锁。 偏向锁 不过,当线程执行到临界区(critical section)时,此时会利用**CAS(Compare and Swap)**操作,将线程ID插入到Markword中,...原创 2020-04-07 12:34:43 · 185 阅读 · 2 评论 -
20200407——java并发 Synchronized深入的 Monitor 七
Java线程同步相关的Moniter 在多线程访问共享资源的时候,经常会带来可见性和原子性的安全问题。为了解决这类线程安全的问题,Java提供了同步机制、互斥锁机制,这个机制保证了在同一时刻只有一个线程能访问共享资源。这个机制的保障来源于监视锁Monitor,每个对象都拥有自己的监视锁Monitor。 先来举个例子,然后我们在上源码。我们可以把监视器理解为包含一个特殊的房间的建筑物,这个特殊房间...原创 2020-04-07 00:52:55 · 208 阅读 · 0 评论 -
20200407——java并发 synchronized原理 六
知乎地址 NIO的3个核心概念 NIO重点是把**Channel(通道),Buffer(缓冲区),Selector(选择器)**三个类之间的关系弄清楚。 缓冲区Buffer Buffer是一个对象。它包含一些要写入或者读出的数据。在面向流的I/O中,可以将数据写入或者将数据直接读到Stream对象中。 在NIO中,所有的数据都是用缓冲区处理。这也就本文上面谈到的IO是面向流的,NIO是面向缓冲区的...原创 2020-03-24 14:23:30 · 183 阅读 · 2 评论 -
20200404——java并发 线程池 五
什么是线程池 简单理解就是 预先创建好一定数量的线程对象,存入缓冲池中,需要用的时候直接从缓冲池中取出,用完之后不要销毁,还回到缓冲池中。 线程池存在必要性 提高线程的利用率,降低资源的消耗。 提高响应速度,线程的创建时间为T1,执行时间T2,销毁时间T3,用线程池可以免去T1和T3的时间。 便于统一管理线程对象 可控制最大并发数 ThreadPoolExecutor ThreadPoolExe...原创 2020-04-04 21:12:02 · 166 阅读 · 0 评论 -
20200404——java并发 AQS 四
关于AQS前言 AQS是悲观锁的等待队列,等一个线程进入锁之后,其他的锁都要在队列中排队,根据不同的实现要求,AQ都可以实现。 在JDK中我们一般用AQS来构建跟实现显示锁,语言层面我们一般用关键字Syn来实现。AQS(AbstractQueuedSynchronizer 抽象队列同步器)在上一文中被广泛使用。比如CountDownLatch,ThreadPoolExecutor,Reentra...原创 2020-04-04 18:34:39 · 136 阅读 · 0 评论 -
20200404——java并发 CAS、LOCK、读写锁 二
CAS 什么是CAS compare and swap的缩写 什么是原子(Atom)操作: 多线程中的原子操作类似于数据库中的同时执行AB两个语句,要么同时执行成功,要么同时执行失败。 synchronize的不足: syn是基于阻塞的锁机制,颗粒度还是比较大 的。 如果被阻塞的线程优先级很高怎么办。 拿到锁的线程一直不释放锁怎么办。 如果出现大量竞争会消耗CPU,同时带来死锁或其他安全隐...原创 2020-04-04 18:12:35 · 273 阅读 · 0 评论 -
20200404——java并发 原子类 三
本篇文章主要是为了解决CAS 为什么会出现Atomic类 在多线程或者并发环境中,我们常常会遇到这种情况 int i=0; i++ 稍有经验的同学都知道这种写法是线程不安全的。为了达到线程安全的目的,我们通常会用synchronized来修饰对应的代码块。现在我们有了新的方法,就是使用J.U.C包下的atomic类。 Atomic类的原理是什么呢 一句话来说,atomic类是通过自旋CAS操作vo...原创 2020-04-04 17:49:27 · 131 阅读 · 0 评论 -
20200404——java并发编程 线程基础/线程之间的共享和协作 一
一言以蔽之:Java 并发编程的目的就是充分利用计算机的资源,把计算机的性能发挥到最大 什么是高并发 并发 concurrency 和并行 parallelism 的区别 并发是指多个线程操作同一个资源,不是同时操作,而是交替操作,单核 CPU,只不过因为速度太快,看起来是同时执行(张三、李四,共用一口锅炒菜,交替执行),通过时间片轮转机制RR调度实现并发。 速度太快,看起来像是并行。 并...原创 2020-04-04 17:20:07 · 251 阅读 · 0 评论