多线程学习笔记

—-多线程学习
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
    
    不用锁、用小锁、合并多个小锁、分离读写锁
一和四是重点

Author: bkdwei