zoukankan      html  css  js  c++  java
  • 《Java并发编程的艺术》读书笔记

    一、并发编程的挑战

    上下文切换:cpu通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。所以任务从保存到再加载的过程就是一次上下文切换。

    如何减少上下文切换:

      无锁并发编程

      cas算法

      使用最少线程

      协程

    避免死锁:

      避免一个线程同时获取多个锁

      避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源

      尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制

      对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况

    二、Java并发机制的底层实现原理

    volatile:

      是轻量级的synchronized

      当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值

      它不会引起线程上下文的切换和调度

    volatile的实现原则:

      Lock前缀指令会引起处理器缓存写回到内存,同时缓存一致性机制会阻止同时修改由两个以上处理器缓存的内存区域数据

      一个处理器的换成回写到内存会导致其他处理器的缓存无效

    通过使用LinkedTransferQueue(追加了字节)来提高队列的出入队效率

    Java中锁的3种形式:

      对于普通同步方法,锁是当前实例对象

      对于静态同步方法,锁是当前类的Class对象

      对于同步方法块,锁是Synchonized括号里配置的对象

    synchronized:

  • 相关阅读:
    BZOJ 3513: [MUTC2013]idiots(fft)
    BZOJ 2194: 快速傅立叶之二(fft)
    BZOJ 3779: 重组病毒(线段树+lct+树剖)
    LUOGU P3723 [AH2017/HNOI2017]礼物 (fft)
    CF 622F (拉格朗日插值)
    LUOGU P4781 【模板】拉格朗日插值
    bzoj 4184 shallot——线段树分治+线性基
    51nod 1673 树有几多愁——虚树+状压DP
    bzoj 3611(洛谷 4103) [Heoi2014]大工程——虚树
    bzoj 2286(洛谷 2495) [Sdoi2011]消耗战——虚树
  • 原文地址:https://www.cnblogs.com/ctxsdhy/p/8606742.html
Copyright © 2011-2022 走看看