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

    一、并发编程的挑战

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

    如何减少上下文切换:

      无锁并发编程

      cas算法

      使用最少线程

      协程

    避免死锁:

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

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

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

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

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

    volatile:

      是轻量级的synchronized

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

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

    volatile的实现原则:

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

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

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

    Java中锁的3种形式:

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

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

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

    synchronized:

  • 相关阅读:
    字典序问题 算法实现题1-2
    统计数字问题 算法实现1-1
    P问题 NP问题 NPC问题 NP-Hard问题 简述
    Python argparse库简单入门
    HDU 3506 区间DP 四边形不等式
    HDU 1530 最大团问题 模板
    树状数组入门+代码
    HDU 1520 Anniversary party 树状dp
    京东 广告部门一面 4.22
    字节跳动 ailab二面 4.16
  • 原文地址:https://www.cnblogs.com/ctxsdhy/p/8606742.html
Copyright © 2011-2022 走看看