【并发编程】-Java高并发、线程安全编程
Java高并发、线程安全编程
luu_一只程序猿
这个作者很懒,什么都没留下…
展开
-
4-synchronized保证线程安全的原理
synchronized保证线程安全的原理-内置锁在看synchronized之前,我们首先来看内置锁,什么是内置锁呢?就是说,Java中每一个对象都可以用作同步的锁,那么,这些锁就被称之为内置锁.其实synchronized的原理其实就是加了锁,内置锁和互斥锁所决定的。每个对象都有锁,而这些锁都是互斥的,一个进来之后,另外的就不能进来了,因此就可以保证线程的安全性。synchroni...原创 2019-08-08 15:13:11 · 684 阅读 · 0 评论 -
5-理解自旋锁,重入锁
重入锁重入锁,也就是锁重入,什么意思呢?之前我们用到的synchronized就是一个重入锁。那么,什么是重入锁呢?先说非重入锁,我们知道,当多个线程来访问一个方法的时候,比如说这个方法上已经加了一个synchronized,多个线程来进行访问的时候,那么,显然,当一个线程拿到我们的锁之后,那么,其他的线程就需要等待竞争锁,那么,当第一个线程执行完毕释放了这个锁之后,那么,其他的线程才能够...原创 2019-09-27 17:28:11 · 255 阅读 · 0 评论 -
6-深入理解volatile原理与使用
深入理解volatile原理volatile:称之为轻量级锁,被volatile修饰的变量,在线程之间是可见的。可见:一个线程修改了这个变量的值,在另一个线程中能够读取到这个修改后的值。synchronized除了线程之间互斥之外,还有一个非常大的作用,就是保证可见性。以下demo即保证a值的可见性为了提高处理器的执行速度,在处理器和内存之间增加了多级缓存来提升。但是由于引入了多...原创 2019-09-29 14:50:30 · 145 阅读 · 0 评论 -
7-JDK5提供的原子类的操作以及实现原理
关于线程安全性问题的一个解决方案,我们之前对于之前所出现的线程安全性问题已经了解了两个解决方案,第一个是synchronized,第二个是volatile。但是对于我们之前的数值序列生成器来讲,使用volatile并不是一个合理的解决方案,因为volatile只能够保证读和写的多个线程之间的可见性,但是,并不能够保证原子性,那么,++(自增)并不是一个原子性操作,因此,volatile解决不了这个...原创 2019-09-29 15:54:35 · 122 阅读 · 0 评论 -
8-Lock接口的认识与使用
关于Lock,Lock顾名思义就是锁,我们之前也已经了解过了关于锁,它其实是解决线程安全性问题的另外一种方案,解决线程安全性问题,我们已经学习了哪些呢?第一个就是synchronized; 第二个,我们了解了volatile。这两个可以追溯的历史是比较远的,synchronized在JDK多线程出现的时候,就出现。 第三个是 ,JDK5新特性中新加入的goc包中的Atomic,Atom...原创 2019-09-29 17:43:14 · 170 阅读 · 0 评论 -
9-手动实现一个可重入锁
首先 自定义一个锁,我们可以实现Lock接口;lock接口源码如下:package java.util.concurrent.locks;import java.util.concurrent.TimeUnit; public interface Lock { void lock(); void lockInterruptibly() throws Interrupte...原创 2019-09-29 19:26:22 · 111 阅读 · 0 评论