随笔分类 - 并发案例
            
    为什么AtomicInteger在CAS 在这个过程中不会被其他线程打断
    
            
            
        
摘要:AtomicInteger中的CAS操作是基于硬件级别的原子操作,因为它是由CPU硬件直接支持的操作。在CAS操作期间,对于同一内存地址的多个线程的访问会被串行化,即同时只有一个线程能够成功执行CAS操作。当一个线程请求执行CAS操作时,如果当前内存地址的值与期望的值相同,那么该线程就成功执行了CA
        阅读全文
            
        
            
    指令重排案例
    
            
            
        
摘要:package thread; public class ResortDemo { static int i = 0; static boolean f = false; public static void main(String[] args) { new Thread(() -> { try 
        阅读全文
            
        
            
    15.锁绑定多个条件Condition
    
            
            
        
摘要:1.代码 package com.mydemo; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Reentr
        阅读全文
            
        
            
    14.线程通信之生产者消费者传统版(lock, await, signal)
    
            
            
        
摘要:1.代码 package com.mydemo; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Reentr
        阅读全文
            
        
            
    13.BlockingQueue
    
            
            
        
摘要:1.BlockingQueue的核心方法 2.阻塞超时放弃演示 package com.mydemo; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import 
        阅读全文
            
        
            
    12.Semaphore
    
            
            
        
摘要:1.定义 信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制 正常的锁(concurrency.locks或synchronized锁)在任何时刻都只允许一个任务访问一项资源,而 Semaphore允许n个任务同时访问这个资源。 模拟一个抢车位的场景,假设一共有6个
        阅读全文
            
        
            
    11.CyclicBarrier
    
            
            
        
摘要:1.定义 CyclicBarrier的字面意思就是可循环(Cyclic)使用的屏障(Barrier)。它要求做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await
        阅读全文
            
        
            
    10.CountDownLatch
    
            
            
        
摘要:1.定义 让一线程阻塞直到另一些线程完成一系列操作才被唤醒。 CountDownLatch主要有两个方法(await(),countDown())。 当一个或多个线程调用await()时,调用线程会被阻塞。其它线程调用countDown()会将计数器减1(调用countDown方法的线程不会阻塞),
        阅读全文
            
        
            
    9.java锁之读写锁代码验证
    
            
            
        
摘要:1.实现一个读写缓存的操作,假设开始没有加锁的时候,会出现什么情况 import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; class MyCache { private volati
        阅读全文
            
        
            
    8.java锁之自旋锁代码验证
    
            
            
        
摘要:package com.mydemo; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import static java.lang.Thread.currentTh
        阅读全文
            
        
            
    7.java锁之可重入锁和递归锁代码验证 Synchronized以及ReentrantLock可重入锁演示程序
    
            
            
        
摘要:1.可重入锁(也叫做递归锁) 指的是同一线程外层函数获得锁之后,内层递归函数仍然能获取该锁的代码,在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁。 也即是说,线程可以进入任何一个它已经拥有的锁所同步着的代码块。 ReentrantLock/synchronized就是一个典型的可重入
        阅读全文
            
        
            
    5.集合类不安全之Set
    
            
            
        
摘要:package com.mydemo; import java.util.Collections; import java.util.HashSet; import java.util.Set; import java.util.UUID; import java.util.concurrent.C
        阅读全文
            
        
            
    6.集合类不安全之Map
    
            
            
        
摘要:package com.mydemo; import java.util.*; import java.util.concurrent.ConcurrentHashMap; public class MapNotSafeDemo { public static void main(String[] 
        阅读全文
            
        
            
    4.集合类不安全之并发修改异常
    
            
            
        
摘要:1.list不安全 package com.mydemo; import java.util.ArrayList; import java.util.UUID; import java.util.Vector; import java.util.concurrent.CopyOnWriteArray
        阅读全文
            
        
            
    3.CAS源码探索
    
            
            
        
摘要:1.Compare And Set 示例程序 package com.mydemo; import java.util.concurrent.atomic.AtomicInteger; public class CASDemo { public static void main(String[] a
        阅读全文
            
        
            
    2.volatile不保证原子性
    
            
            
        
摘要:package com.mydemo; public class MyData2 { volatile int number=0; public void addPlusPlus() { number ++; } } class VolatileAtomicityDemo { public stat
        阅读全文
            
        
            
    1.可见性的代码验证说明
    
            
            
        
摘要:1.在修改完number值以后,while循环并没有检查到 package com.mydemo; import java.util.concurrent.TimeUnit; public class MyData { public int number=0; public void add_to_
        阅读全文
            
        
            
    15.生产者消费者阻塞队列版
    
            
    
摘要:package com.atgu; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; imp
        阅读全文
            
        
 
                     
                    
                 
                    
                 
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号