Java并发编程实战 阅读笔记
JDK同步容器
实现的时候通过在每个get和set函数前加入synchronized
通过在线程非安全的容器每个get和set函数前面动态注入synchronized
- Collections.synchronizedCollection
- Collections.synchronizedList
- Collections.synchronizedSet
- Collections.synchronizedMap
JDK并发容器
- ConcurrentHashMap
- CopyOnWriteArrayList
- ConcurrentSkipListMap
- ConcurrentLinkedDeque
- ConcurrentLinkedQueue
同步工具类
- CountDownLatch
- FutureTask
- Semaphore
- CyclicBarrier
并行程序的发展
- Single Thread
- New Thread Per Task
- Executor框架
Executor框架
What 执行什么任务
实现run函数
public interface Executor {
void execute(Runnable command);
}
public interface Runnable {
public abstract void run();
}
Where: 在哪些线程上执行
- ThreadPool线程池
- ThreadFactory
How Many: 多少个任务能并行
取决于线程池的实现
- Executors.newSingleThreadExecutor 单线程
- Executors.newFixedThreadPool 固定大小并行
- Executors.newCachedThreadPool 大小动态调整
When: 什么时候执行
取决于线程池的实现
- Executors.newScheduledThreadPool 延迟或者定时执行
中断
- 触发中断:
Thread.interrupt
- 被影响的操作:
Thread.sleep
和Object.wait
- 被影响结果:
InterruptedException
显示锁
- Lock
- ReentrantLock
- ReadWriteLock
- ReentrantReadWriteLock
- AbstractQueuedSynchronizer
非阻塞同步
- CAS Compare and Swap
- AtomicInteger、AtomicLong、AtomicBoolean、AtomicReference
- AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray
- ConcurrentStack、ConcurrentLinkedQueue
- AtomicStampedReference、AtomicMarkableReference
Written on December 7, 2018