![](https://img-blog.csdnimg.cn/91faccedb7804f4c98ede95cf7775cc4.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发编程
文章平均质量分 79
JavaSE 并发编程
海鸟不会飞
人生的成功不在于拿到一手好牌,而是要考虑怎么能把坏牌打好。
展开
-
AbstractQueuedSynchronizer(AQS)
java.util.concurrent包中的大多数同步器实现都是围绕着共同的继承行为,如:等待队列、条件队列、独占获取、共享获取等,而这些行为的抽象就是基于AbstractQueuedSynchronizer(简称AQS)实现的,AQS是一个抽象的同步框架,可以用来实现一个依赖状态的同步器。条件等待队列:调用await()的时候会释放锁,然后线程会加入到条件队列,调用signal()唤醒的时候会把条件队列中的线程节点移动到同步队列中,等待再次获取锁。CANCELLED,值为1,表示当前的线程被取消。原创 2023-02-28 09:18:22 · 43 阅读 · 0 评论 -
并发编程—synchronized
由于对象需要存储的运行时数据很多,考虑到虚拟机的内存使用,markOop被设计成一个非固定的数据结构,以便在极小的空间存储尽量多的数据,根据对象的状态复用自己的存储空间。Mark Word:用于存储对象自身的运行时数据,如:哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,这部分数据的长度在32位和64位的虚拟机中分别为32bit和64bit,官方称它为“Mark Word”。MESA模型中,条件变量可以有多个,Java语言内置的管程里只有一个条件变量。原创 2023-02-27 11:10:23 · 121 阅读 · 0 评论 -
并发编程—CAS
CAS概念:比较并交换,CAS是一种原子操作,针对一个变量,首先比较它的内存值与某个期望值是否相同,如果相同,就给这个变量赋一个新值。CAS可以看做是乐观锁的一种实现,Java原子类中的递增操作就是通过CAS自旋实现的。CAS是一种无锁算法,在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。原创 2023-02-27 10:42:20 · 159 阅读 · 0 评论 -
Java线程详解
join可以理解成是线程合并,当在一个线程调用另一个线程的join方法时,当前线程阻塞等待被调用join方法的线程执行完毕才能继续执行,所以join的好处能够保证线程的执行顺序,但是如果调用线程的join方法其实已经失去了并行的意义,虽然存在多个线程,但是本质上还是串行的,最后join的实现其实是基于等待通知机制的。):它们是依赖于内核的,即无论是用户进程中的线程,还是系统进程中的线程,它们的创建、撤销、切换都是由内核实现。原创 2023-02-20 10:57:29 · 560 阅读 · 0 评论 -
线程基础知识
当有若干个线程都要使用某一个共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,知道占用资源者释放该资源。线程之间所具有的一种制约关系,一个线程的执行依赖于另一个线程的消息,当它没有得到另一个线程的消息时等待,直到消息到达时才被唤醒。运行状态的线程如果调用一个阻塞的API(以阻塞方式读取文件)或等待某个事件(条件变量),那么线程的状态就会转到休眠状态,同时释放CPU的使用权,线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。原创 2023-02-20 10:32:34 · 33 阅读 · 0 评论 -
volatile的内存语义
LOCK前缀指令会等待它之前所有的指令完成、并且所有缓冲的写操作写回内存(也就是将store buffer中的内容写入内存)之后才开始执行,并且根据缓存一致性协议,刷新store buffer的操作会导致其他cache中的副本失效。volatile仅仅保证对单个volatile变量的读/写具有原子性,而锁的互斥执行的特性可以确保对整个临界区代码的执行具有原子性。操作必须是连续的,即修改后必须立即同步回主内存,使用时必须从主内存刷新,由此保证volatile修饰的变量操作对多线程的可见性。原创 2023-02-14 14:26:58 · 75 阅读 · 1 评论 -
Java内存模型(JMM)
Java虚拟机规范中定义了Java内存模型(Java Memory Model)用于屏蔽各种硬件和操作系统之间的内存访问差异,以实现让Java程序在各个平台下能达到一致的并发效果,JMM规范了Java虚拟机与计算机内存是如何协同工作的,规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量值,以及在必须时如何同步的访问共享变量。作用于工作内存的变量,把工作内存的一个变量的值传输到主内存中,以便随后的write的操作。作用于主内存的变量,它把store操作从工作内存中一个变量的值传送到主内存的变量中。原创 2023-02-14 14:13:57 · 113 阅读 · 0 评论 -
并行与并发
并行并发的目的都是最大化CPU使用率。 同一时刻,有多条指令在多个处理器(CPU)上同时执行,无论从微观还是从宏观上来看,二者都是一起执行的。 同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使得多个进行快速交替的执行。 当一个线程修改了共享变量的值,其他线程能够看到修改后的值。在Java内存模型中,通过变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量的值,原创 2023-02-14 14:01:11 · 76 阅读 · 0 评论