• 并发编程的艺术,让一不必二


         并发是个长久问题,很多时间里,我们喜欢说,应该是这样,可能是。但是,不够肯定,要肯定还得从书本上去肛答案。以下聊以藉慰。

          Syncronized 修饰方法时,同一个类中的所有syncronized 方法只能有一个方法被访问

          syncronized修复对象时,则只能影响到对象,不会阻止其他方法被访问

          在生产/消费场景中,由于需要对两个不同的方法进行同步,因此只能修饰方法,使其只能执行一个。

          jmm内存模型,as-if-serial, happens-before. 不管怎么样重排序,都不能影响结果。内存屏障,保证处理器不能重排序,编译器不能重排序。

          valatile是最轻量级的线程安全锁,它可以轻松保证一个变量的内存可见性。

          cas是性能最高的一种原子操作实现,但存在ABA问题,可以增加变量版本号来避免ABA问题。

          jmm内存模型,syncronized, volatile, final 内存语义。顺序一致性,重排序。

          单例模式的坑,new xxxObj(); 是非线程安全的,可以使用valatile或者内部类保证单例安全,final变量会在实例化或者使用该类之前完成初始化。final前后也产允许重振序。

          通过使用内存屏障保证重排顺序,StoreStore, StoreLoad, LoadLoad, LoadStore 屏障类型。

          wait阻塞是通过monitor enter exit 实现的。Thread.join()实现线程等待终止。

    java中的锁

          Lock接口,可以使用多个锁,syncronized做不到。

          同步队列是一个fifo双向队列,head tail。锁一般都需要设置超时。

          ReentrantLock 重入锁,ReentrantReadWriteLock 读写锁,更高效读写。LockSupport工具,park阻塞。Condition接口,lock.newCondition();轻松实现多锁功能(空满两个锁配合)。

    java并发容器和框架

          ConcurrentHashMap, doug lea, 分段锁高效。使用hash算法定位segment,再hash进行定位元素。

          阻塞队列,ArrayBlockingQueue, LinedBlockingQueue, PriorityBlockingQueue, DelayQueue, SyncronousQueue, LinkedTransferQueue, LinkedBlockingQueue.

          countDownLatch 制定要连接池总数,每使用一个,end countDL就countdown, 从而达到总数限制的作用。CyclicBarriar, 等到所有线程都到达屏障后,再一起做某件事,可以用来做真正的并发请求。

          Fork/Join框架。将大任务拆小,再汇聚结果。

    原子类操作

          AtomicBoolean, AutomicInteger, Auto。

          AutomicLongArray, 

    线程池的使用

          Threadpool。

           Executors。

  • 相关阅读:
    Core Foundation框架(2)命名规范,内省
    Core Foundation框架(1)基础介绍
    Swift 数组,字典
    Swift 操作符
    Swift 可选值
    Swift 元组
    Swift 变量声明
    iOS开发_UI_AutoLayout
    iOS开发_Objective-C_字符串操作
    iOS开发_Objective-C_监听搜索时用户输入的拼音
  • 原文地址:https://www.cnblogs.com/yougewe/p/9241615.html
Copyright © 2020-2023  润新知