—-多线程学习
future模式:将耗时对内容独立出去,并且获取结果时依赖线程是否执行完毕。
Master-Worker模式:
worker:取线程,保存线程结果,保留一个接口
Master:添加任务,新建work,启动线程任务
Guarded Suspension模式:
不变模式
生产者–消费者模式:中间加类一个缓冲池
简单对线程池技术
ThreadPool
初始化
取一个线程
放回一个线程:list.add(),thread.shutdown
启动所有线程
停止所有线程
4.并发控制方法
volatile:其他线程对变量对修改,可以即时反应在当前线程中,并即时写回共享主内存。
synchronized:同步一个对象或一个代码块,可以和wait()、notify()一同使用。
reentrantLock:优先使用非公平锁,并且记得在finally释放锁。
reentrantReadWriteLock:读写锁分离,读得越多,性能越好
5.锁对性能和优化
避免死锁:互斥条件,请求与保持条件,不剥夺条件,循环等待
减小锁持有时间
减小锁粒度(即锁定的对象的范围)
使用读写锁
锁的粗化
锁消除;在非线程环境中使用同步集合Vector等。-XX:+DoEscapeAnalysis -XX:+EliminateLocks
禁用锁偏向:-XX:UseBiasedLocking
总结:
一、设计模式:
future模式:将耗时的操作独立成一个线程进行操作
Master-Worker模式:将一个大任务细分成多个小任务。
Guarded Suspension模式:请求和处理之间添加了一个缓冲池
不变模式:被创建之后就不再改变,并且需要被共享和多线程访问。
生产者-消费者模式:同二
二、线程池
Executors.newFixedThreadPool(100);
Executors.newCachedThreadPool();
Executors.newScheduleThreadPool()
[线程的创建与销毁占用CPU,线程本身占用内存]
线程池大小的设置
扩展ThreadPoolExecutor
三、JDK并发数据结构
List:读多–CopyOnWriteArrayList,写多Vector
Set:读多–CopyOnWriteArraySet,写多synchronizedSet(Set<T> s)
Map:ConcurrentHashMap
Queue:ConcurrentLinkedQueue,LinkedBlockingQueue
Deque:
四、并发控制方法
使用violatile
Synchronized
ReentrantLock
reentrantReadWriteLock
condition
Semaphore
ThreadLocal
五、锁的性能和优化
避免死锁:互斥条件,请求与保持条件,不剥夺条件,循环等待
减小锁持有时间
减小锁粒度(即锁定的对象的范围)
使用读写锁
锁的粗化
锁消除;在非线程环境中使用同步集合Vector等。-XX:+DoEscapeAnalysis -XX:+EliminateLocks
禁用锁偏向:-XX:UseBiasedLocking
不用锁、用小锁、合并多个小锁、分离读写锁
一和四是重点