并发编程
llllllxj
业精于勤,荒于嬉;行成于思,毁于随
展开
-
java线程池
java线程池 四种常用的线程池 Excutors.newSingleThreadExecutor 单个线程的线程池。 Excutors.newFixedThreadPool 固定数量的线程池,处理的任务超过线程数量会进行等待。 Excutors.newCacheThreadExecutor 可缓存线程池。 Excutors.newScheduleThreadExecutor 主要完成定时或者周期的执行线程任务。 无论以上哪一种线程池,内部都是使用的ThreadPoolExecutor这个类,我原创 2020-10-22 17:36:05 · 125 阅读 · 0 评论 -
AQS
AQS 在java中有两种锁机制,一种是Synchronized关键字,这个java自带的内置锁,其中的加锁和解锁的逻辑不用我们去实现。还有一种是JUC包下面的Lock,这是一种显示锁,需要我们手动完成加锁和解锁(其中解锁的逻辑一定要在try/catch中的finally中编写,不然可能会出现死锁问题),这种显示锁就需要用到AQS。 全称AbstractQueuedSynchronizer(抽象队列同步器),对比Synchronized,要实现线程同步,有三点必须要满足: 1.线程获取锁的过程。AQS中大量原创 2020-10-22 17:34:57 · 124 阅读 · 0 评论 -
CAS和Synchronized
CAS CAS(compare and sawp)比较并且交换,是一种实现线程安全的无锁技术。在我们多线程情况下对一个变量进行修改时,首先要保证该变量的可见性,就要使用volatile关键字来修饰该变量,在修改该变量之前会先读取一下,计算一下得到修改后的预期值,然后进行CAS把读取的变量值修改为预期值,这一步操作是原子性的,所以如果读取值发生了变化,就会返回false,这样就可以一直while循环去修改值。看一下jdk中AtomicInteger.getAndIncrement()方法: public fi原创 2020-10-22 17:34:24 · 1331 阅读 · 1 评论 -
JMM内存模型和volatile
JMM内存模型 JMM内存模型是java内存模型,又叫java线程内存模型。 首先理解一下并发和并行的概念。 并发:是一种逻辑架构,指的是在同一时刻只能由一条指令执行,在宏观意义上看起来是多个进程或者线程同时执行,但是在微观意义上,只是把时间分成若干段,多个进程之间快速交替的执行。可以在单核或者多核上执行。 并行:在同一时刻,有多条指令在多个处理器上同时执行,无论是在宏观或者微观来看,二者都是在一块执行的。只会在多核处理器上发生。 JMM是一种逻辑架构,每个线程都有自己的本地方法栈,本地方法栈中局部原创 2020-10-22 17:32:58 · 168 阅读 · 0 评论