• 《Java并发编程的艺术》读书笔记


    一、并发编程的挑战

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

    如何减少上下文切换:

      无锁并发编程

      cas算法

      使用最少线程

      协程

    避免死锁:

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

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

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

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

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

    volatile:

      是轻量级的synchronized

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

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

    volatile的实现原则:

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

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

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

    Java中锁的3种形式:

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

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

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

    synchronized:

  • 相关阅读:
    LIB和DLL
    string
    Lists
    ctypes常用dll
    tomcat的安装配置注意事项
    tomcat6的简单安装
    存储GFS 学习笔记
    进程是否启动查看命令方法
    (转载)最新linux搭建gfs系统iscsi+GFS实现网络存储
    推荐两款支持在linux下运行ASP.NET网站的国产免费WEB服务器软件
  • 原文地址:https://www.cnblogs.com/ctxsdhy/p/8606742.html
Copyright © 2020-2023  润新知