![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发和锁系列
文章平均质量分 84
lans_g
追求卓越,成功就会在不经意间追上你。
展开
-
分布式锁的实现(三)数据库篇
通过数据库来实现分布式锁,不过在实际场景中很少用到原创 2022-08-08 15:40:47 · 343 阅读 · 0 评论 -
分布式锁的实现(二)zookeeper篇
我们知道zookeeper主要服务于分布式系统,它为我们提供了以下几种服务:统一配置管理、统一命名服务、集群管理、分布式锁。本文我们主要来谈谈分布式锁的部分。原创 2022-08-08 15:13:24 · 541 阅读 · 0 评论 -
聊聊关于volatile关键字
一、java内存模型(JMM) 在java内存模型中,各线程如果要对数据进行操作,不会直接在主内存(也就是各线程共享的内存)上进行操作,而是先将其可能用到的变量先拷贝一份作为副本放到自己的工作内存中,然后对自己工作内存中的数据进行操作,操作完成后将更新的数据刷回主内存。 在当前的 Java 内存模型下,线程可以把变量保存本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。原创 2022-05-17 08:46:44 · 170 阅读 · 0 评论 -
由浅入深学习java并发(一文解决多线程、线程池)
一、进程和线程1.进程进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。线程执行开销小,但不利于资源的管理和保护;而进程正相反。2.线程线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地原创 2022-04-13 19:57:44 · 324 阅读 · 0 评论 -
锁系列—浅谈CAS及原理
一、什么是CAS?CAS就是比较并交换(compare and swap)的意思,属于乐观锁的一种。通俗点说,当我们想修改一个值时,我们会先将这个值和原先的值进行比较,如果发现和原先的值一样,那么我们再进行修改。CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。更新一个变量时,只有当预期值A和内存地址V中的实际值相同时,才会将内存地址对应的值修改为B。如果发现不一致,则会重新进行尝试,这个尝试的过程被称为自旋。二、CAS的缺点1.cpu开销大 自旋锁的目的是为了占原创 2022-05-16 22:33:34 · 4509 阅读 · 0 评论 -
锁系列—Synchronized和ReentrantLock对比
一、 synchronized1.三种使用方式修饰实例方法:给对象实例加锁。修饰静态方法:给当前类加锁。修饰代码块:指定加锁对象(类或者指定对象)。2.底层原理(jvm层面)(1)修饰代码块synchronized 同步语句块使用的是 monitorenter(对应JMM模型lock指令) 和 monitorexit (unlock)指令,其中 monitorenter 指令指向同步代码块的开始位置,monitorexit 指令则指明同步代码块的结束位置。**当执行 monitorent原创 2022-05-16 22:31:50 · 2104 阅读 · 0 评论