JCP

Java concurrent programming

Posted by Woncz on December 6, 2019

Java concurrent programming

[TOC]

基础理论篇

  • CPU、OS,多任务抢占式
  • 上下文切换
  • 同步VS异步、并行VS并发、死锁VS活锁、

JVM实现机制

  • JMM:原子性、可见性、有序性
  • 指令重排:Happen-Before规则、as-if-serail规则
  • 临界区
  • Java对象头:JVM规范,排他锁,轻量级锁,偏向锁

JDK源码

  • synchronized
  • volatile
  • final
  • CAS
  • unsafe Java的指针
  • Lock(乐观锁、悲观锁、公平锁、非公平锁、独占锁、共享锁、可重入锁、自旋锁),锁优化
  • AQS,LockSupport,ReentrantLock,ReentrantReadWriteLock,StampedLock,
  • 并发容器:CopyOnWriteArrayList,ConcurrentLinkedQueue,LinkedBlockingQueue,ArrayBlockingQueue,PriorityBlockingQueue,DelayQueue,Collections.Synchronized wrapper
  • Atomic, LongAdder, LongAccumulator
  • Thread Group
  • ThreadPoolExecutor,ScheduledThreadPoolExecutor
  • ThreadLocal
  • Fork/Join
  • CountDownLatch
  • CyclicBarrier
  • Semaphore
  • 并行任务:Future,CompletableFuture

Design Pattern in JCP

  • Singleton
  • Consumer & Producer
  • Pub & Sub
  • Template Method
  • Factory
  • Proxy
  • Disruptor

Thread state diagram

  • state option [new - runnable - terminated - waiting - waiting-timeout - blocked]
  • start
  • run
  • stop
  • interupt
  • join
  • wait
  • sleep
  • notify
  • yield
  • suspend
  • resume

Append

1
2
3
4
5
6
7
8
9
1/ distinguish [this thread] VS [current executing thread]
2/ daemon thread VS user thread
3/ CPU cache @sun.misc.Contented 字节填充 LongAddr  Array VS List
4/ 乐观锁 VS 悲观锁  sql for update -> 提升TPS
5/ ThreadLocal VS InheritableThreadLocal,ThreadLocal时内存泄露,使用完remove()
6/ LongAdder > AtomicLong    LongAccumulator
7/ CopyOnWriteArrayList COW(Redis的持久化) 弱一致性 平行宇宙
8/ StampedLock 带有version的optimistic Lock
9/ Future.get(),需带有Timeout参数,否则会因为线程池的一些RejectPolicy导致阻塞而永远不返回

JCP in action

  • JMH,IDEA插件
  • slf4j - logback - ArrayBlockingQueue
  • Tomcat NIO NioEndpoint Daemon(true)
  • Disruptor无锁环形内存队列
  • Akka - Actor - Scala - event-driven msg
  • Reactor Pattern - netty The purpose of the Reactor design pattern is to avoid the common problem of creating a thread for each message, request, and connection.
  • select, poll, epoll, and kqueue.
  • Thread-based architecture VS Event-driven architecture

reference

Java并发编程的艺术

Java并发编程实战

Java并发编程之美

实战Java高并发程序设计(第2版)

JDK8

Understanding Reactor Pattern

Reactor Pattern part1

Reactor Pattern part2