java并发
2020-04-02 14:02:27   0  举报             
     
         
 AI智能生成
  Java并发脑图
    作者其他创作
 大纲/内容
  并发基础    
     并发基础    
     并发编程优缺点    
     优点  
     缺点  
     易混淆概念  
     线程状态和基本操作
    
     新建线程方法  
     线程状态及切换
  
     线程的基本操作  
     守护线程  
     Java内存布局    
     Java对象头  
     并发关键字    
     synchronized    
     基本用法    
     普通方法:锁住this对象  
     静态方法:锁住类对象  
     代码块:锁住指定的对象  
     优化    
     偏向锁    
     无线程竞争发生,偏向第一个加锁线程。  
     MarkWord记录偏向的线程ID  
     竞争发生时,撤销偏向锁,撤销阈值>20,批量重偏向  
     撤销阈值>40,批量撤销,且该类新建对象无法偏向  
     轻量级锁    
     两个线程分段使用锁时,升级轻量级锁  
     CAS替换Mark Word为Lock Record  
     锁膨胀    
     CAS替换失败时,可能为锁重入或进入竞争
  
     进入竞争后,锁膨胀为重量级锁,当前线程进入Monitor的EntryList阻塞住  
     重量级锁时,MarkWord存储的是Monitor对象地址  
     重量级锁竞争时,有自适应自旋优化,可减少进入阻塞的几率  
     Wait&Notify    
     基本用法    
     首先必须获取对象的锁,因此必须在synchronized中使用
  
     可能产生InterruptedException  
     wait和sleep区别    
     1.wait是Object类方法,sleep是Thread类方法  
     2.wait会释放对象锁,sleep不会释放  
     3.sleep无需和synchronized配合使用,而wait需要  
     wait(timeout)和sleep(timeout)均使线程进入TIMED_WAITING状态  
     保护性暂停模式    
     join的底层实现原理  
     park&unpark    
     和wait notify区别    
     无需和Object Monitor配合使用  
     可先unpark,再park  
     可准确唤醒指定线程  
     底层原理    
     每个线程都有一个parker对象  
     park时,设置counter为0,进入cond队列等待  
     unpark时,设置counter为1,同时唤醒cond队列等待的线程  
     CAS    
     1.乐观锁的实现之一  
     原理:底层调用了 CPU指令级别的原子操作:比较并交换   
     volatile    
     作用    
     1.内存可见性  
     2.禁止指令重排  
     3.不保证原子性  
     原理    
     内存屏障    
     读屏障    
     读共享变量之后的代码不能重排序到读屏障之前  
     写屏障    
     写共享变量之前的代码不会重排序到写屏障之后  
     Final    
     作用    
     1.Final类,不能被子类继承  
     2.Final域,不能被改变,底层有写屏障  
     3.Final方法  
     并发工具    
     线程池  
     J.U.C    
     AQS    
     J.U.C工具的基础  
     提供FIFO的等待队列,类似于Monitror的EntryList  
     支持多个条件变量,支持等待,唤醒机制,类似于Monitor的WaitSet  
     使用CAS来设置资源状态state,支持独占模式和共享模式  
     ReentrantLock    
     特点    
     可重入  
     可打断  
     可设置超时  
     可设置公平锁  
     可设置多个条件变量  
     读写锁    
     ReentrantReadWriteLock    
     读锁不支持条件变量  
     写锁支持条件变量  
     重入时不支持锁升级,支持锁降级  
     StampedLock
    
     读写时配合戳一起使用  
     乐观读,tryOptimisticRead    
     1.获取戳
  
     2.验戳    
     成功,无锁读  
     失效,锁升级  
     semaphore
    
     信号量,限制同时访问共享资源的线程数  
     CountdownLatch    
     倒计时锁    
     其他线程调用countDown,将count - 1  
     另外一些线程await,等待count = 0时开始执行  
     CyclicBarrier    
     循环栅栏    
     多个等待线程到达某个需要等待同步的位置调用await方法等待  
     当等待的线程数满足预先设置的数时,所有等待的线程都开始执行  
     并发集合    
     ConcurrentHashMap    
     JDK 1.7  
     JDK 1.8  
     BlockingQueue  
     ConcurrentLinkedQueue  
     CopyOnWriteArrayList  
     
    收藏 
     
 
 
 
 
  0 条评论
 下一页
  
  
  
  
  
  
  
  
  
  
  
 