Java 并发
2019-01-18 20:47:33 0 举报
AI智能生成
Java 并发
作者其他创作
大纲/内容
多线程
原子性,有序性,可见性
volatile关键字
保证此变量对所有的线程的可见性
禁止指令重排序优化
synchronized关键字
作用
确保线程互斥的访问同步代码块
保证共享变量的修改及时可见
有效解决重排序问题
可重入
修饰实例方法
作用于当前实例加锁,进入同步代码前要获得当前实例的锁
修饰静态方法
作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁
修饰代码块
指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁
Java虚拟机对synchronized的优化
偏向锁
优点
加锁和解锁不需要额外的消耗,和执行非同步代码相差无几。
缺点
如果线程存在锁竞争,需要额外的锁撤销的消耗。
适用情况
适用于只有一个线程访问同步块的情况
轻量级锁
优点
竞争的线程不会阻塞,提高了响应速度
缺点
长时间得不到锁的线程使用自旋消耗CPU
使用情况
追求响应速度。同步代码执行非常快
自旋锁
默认是10次, 可以使用参数-XX:PreBlockSpin来设置
可以使用-XX:UseSpinning来开启自旋锁,在jdk1.6之后默认开启
锁消除
锁粗化
重量级锁
synchronized实现的就是重量级锁
优点
程竞争不会使用自旋,不会消耗CPU
缺点
线程出现竞争时会阻塞,响应速度慢
使用情况
追求吞吐量。同步代码执行时间长
中断与synchronized
等待唤醒机制与synchronized
synchronized加锁的完整过程描述
对象监视器(monitor)
Contention List
所有请求锁的线程被首先放置在该竞争队列中
Entry List
Contention List 中有机会获得锁的线程被放置到Entry List
Wait Set
调用wait()方法被阻塞的线程被放置到Wait Set中
OnDeck
任何一个时候只能有一个线程竞争锁 该线程称作OnDeck
Owner
获得锁的线程成为Owner
!Owner
释放锁的线程
对象本身具备的同步方法: synchronized, wait, notify
Lock
CAS
sun.misc.Unsafe
AbstractQueuedSynchronizer
compareAndSetState
Condition原理
Lock实现原理
FIFO队列
公平锁和非公平锁
ReentrantLock
ReentrantReadWriteLock.ReadLock
ReentrantReadWriteLock.WriteLock
和monitor锁synchironized的区别
管理类
ThreadMXBean
ThreadPool
线程池
有哪几种线程池
Executors.newCachedThreadPool()
创建一个缓冲池,缓冲池容量大小为Integer.MAX_VALUE
Executors.newSingleThreadExecutor()
创建容量为1的缓冲池
Executors.newFixedThreadPool(int)
创建固定容量大小的缓冲池
Executors.newWorkStealingPool()
Executors.newScheduledThreadPool()
线程池是怎么实现的
poolsize, corepoolsize, max以及怎么发生变化的
死锁
优缺点
业界类并发框架
构造参数
corePoolSize
maximumPoolSize
keepAliveTime
unit
workQueue
threadFactory
handler(拒绝策略)
ThreadPoolExecutor.AbortPolicy;//丢弃任务并抛出RejectedExecutionException异常。
ThreadPoolExecutor.DiscardPolicy;//也是丢弃任务,但是不抛出异常。
ThreadPoolExecutor.DiscardOldestPolicy;//丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
ThreadPoolExecutor.CallerRunsPolicy;//由调用线程处理该任务
配置线程池大小
Executor
ExecutorService
AbstractExecutorService
ThreadPoolExecutor
Future/FutureTask
基础类: Thread/Runnable/Callable
Thread-yield
Thread-sleep
join
interrupte
ThreadLocal
CountDownLatch/CyclicBarrier/Semaphore
CountDownLatch
CyclicBarrier
Semaphore
原子操作类
基本类型
AtomicInterger
AtomicBoolean
AtomicLong
数组
AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray
原子引用类型
AtomicReference
AtomicStampedReference
AtomicMarkableReference
原子字段类
AtomicIntegerFieldUpdater
AtomicLongFieldUpdater
AtomicReferenceFieldUpdater
线程的状态
NEW
RUNNABLE
WAITING
BLOCKED
TIMED_WAITING
TERMINATED
容器类
参见Java 集合专题
0 条评论
下一页