Speaker: Enrique Zamudio
For more, see table of contents
Classes
- AtomicInteger
- incrementAndGet()
- compareAndSet()
- AtomicReference
- updateAndGet()
- ConcurrentHashMap – methods on Map, but happens atomically
- computeIfAbsent()
- merge()
- ConcurentSkipListMap
- ConcurrentSkipListSet
- LinkedBlockingQueue
- Can take elements and deliver elements concurrently.
- Every element delivered to exaclty one consumer
- Unblocks consumers as long as something in queue
- Locks – Lock, ReadWriteLock, ReentrantLock, CountDownLatch, CyclicBarrier, Semaphore, Phaser
- ReentrantLock – execute code if can acquire lock
- lock()
- tryLock()
- tryLock(10, SECONDS)
- unlock()
- Akka – project that implements Actor paradigm
- vert.x – project for reactive – do things in single thread
- Project Loom – lightweight threads. I thread takes 100MB just to exist; Project Loom is more like 2KB. Also no context switching.
Multiple processes
- multiple copies of your jar
- multiple vms with load balancer
- synchronized or lock fails because each process can run code at same time
- Can use database select … for update in database transaction so outside your process.
- Similarly can use redis to set a lock with a random value. If the value matches, you know the lock is yours. If JVM crashes, lock stays. Can add lock timeout to avoid this
- FencedLock – developed by Hazelcast Raft consensus model.
My take
I feel like I re-learn this topic every time I read the chapter in our book. (Scott wrote the chapter). I’m glad I went to this session. The more times I hear this, the more sticks. I had forgotten the project loom info so was definitely good to hear that again. The part about multiple processes was mostly new to me. (I just new about select for update)