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

    一、并发编程的挑战

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

    如何减少上下文切换:

      无锁并发编程

      cas算法

      使用最少线程

      协程

    避免死锁:

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

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

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

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

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

    volatile:

      是轻量级的synchronized

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

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

    volatile的实现原则:

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

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

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

    Java中锁的3种形式:

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

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

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

    synchronized:

  • 相关阅读:
    影响cpu性能的因素有哪些?
    linux系统中 SElinux安全子系统
    linux 系统中个人用户主页功能
    理解 Segmentation fault
    VI高级命令集锦
    How to be a Star 怎样成为明星?
    名词解释:DEADBEEF
    Unix还能走多远?
    Awk 实例,第 1 部分
    77年出生的朋友,你们过的还好吗?
  • 原文地址:https://www.cnblogs.com/ctxsdhy/p/8606742.html
Copyright © 2011-2022 走看看