美文网首页
七周七并发模型-读书笔记-线程与锁

七周七并发模型-读书笔记-线程与锁

作者: zhangdxchn | 来源:发表于2019-02-25 18:08 被阅读0次

目录

  • 概述
  • 线程与锁
  • 函数式编程
  • Clojure之道-分离标识与状态
  • Actor
  • 通信顺序进程
  • 数据并行
  • Lambda 架构
  • 结束

概述

  • 并发 VS 并行
  • 并行架构
  • 并发:不只是多核
  • 七个模型

线程与锁

Day 1 - 互斥与内存模型

  1. 学习:如何创建线程;Java 对象内置锁实现互斥;线程与锁模型的三个主要危害:竞态条件、死锁、内存可见性;

  2. 线程与锁模型,在不同编程语言中普遍适用的原理:

  • 对共享变量的所有访问都需要同步化
  • 读线程和写线程都需要同步化
  • 按照约定的全局顺序来获得多把锁(对象的散列值)
  • 当持有锁时避免调用外星方法
  • 持有锁的时间尽可能短

Day 2 - 超越内置锁

  1. 内置锁的限制:
  • 一个线程等待内置锁进入阻塞之后,无法中断线程
  • 尝试获取内置锁时,无法设置超时
  • 获得内置锁,必须使用 Synchronized 块
  1. ReentrankLock 提供显式的Lock 与 Unlock 方法,可解决上述限制。
Lock lock = new ReentrankLock();
lock.lock();
try{
    //...
}finally{
    lock.unlock();
}
  1. 可中断的锁-ReentrankLock.lockInterruptibly()

  2. 超时-ReentrankLock.tryLock() -> 活锁现象影响(所有死锁线程同时超时,极有可能重现陷入死锁)

  3. 交替锁(hand-over-hand locking)

  4. 条件变量 ReentrankLock.newCondition()

  5. 原子变量 java.util.concurrent.atomic, 无锁非阻塞

学习:java.util.concurrent.lock; java.util.concurrent.atomic;

Day 3 - 站在巨人肩上

Java.util.concurrent;

  1. 创建线程终极版-使用线程池

  2. 写入时复制, copyOnWriteArrayList 监听器更高效

  3. 线程池应该多大:CPU 密集型,线程池大小接近核数;IO 密集型,线程池可以更大一些。最佳方式是真实环境压测来衡量性能。

  4. 词频统计

    java.util.concurrent.ArrayBlockingQueue 实现生产者与观察者直接的高效协作; java.util.concurrent.ConcurrentHashMap 更高效的并发;

总结

线程与锁模型优点是适用面很广,更接近本质,易于指令式、面向对象语言中实现;缺点没有为并行提供直接支持,不适用于分布式内存模型、不适用于单个系统无力解决的问题。

难点: 难于测试、可维护性低。

相关文章

  • 七周七并发模型

    七个模型来介绍并发与并行。 线程与锁:线程与锁模型有很多众所周知的不足,但仍是其他模型的技术基础,也是很多并 发软...

  • 总结Java的多线程处理--线程与锁(一)同步synchroni

    线程与锁模型 线程与锁模型是比较原始的一种处理并发的方式,主要是对底层硬件的运行过程形式化,这是它的优点也是缺点。...

  • 七周七并发模型-读书笔记-线程与锁

    目录 概述 线程与锁 函数式编程 Clojure之道-分离标识与状态 Actor 通信顺序进程 数据并行 Lamb...

  • 并发编程实战学习

    目录 线程风险 线程风险预防 线程安全设计 并发工具 显示锁 构建自定义的同步工具 java内存模型 并发编程 线...

  • 并发编程

    并发编程基础 Java线程模型 发生了系统调用的锁,就是重量锁 MMU: 虚拟地址映射 线程类型 用户线程:使用J...

  • 并发模型之线程与锁

    三个问题 竞态条件 死锁 内存可见性 规则 访问共享变量时需要同步 读线程和写线程都要同步化 持有锁的时间应该尽可...

  • Java-并发编程知识点总结

    目录: 线程基础 线程池 各种各样的锁 并发容器 原子类 Java 内存模型 线程协作 AQS 框架 一、线程基础...

  • java面试基础之高并发

    问:Java的并发、多线程、 线程模型; 问:数据一致性如何保证;Synchronized关键字,类锁,方法锁,重...

  • 七周七并发(线程与锁)

    1.概述 1.1并发还是并行(Concurrent or Parallel) A concurrent progr...

  • 并发整理(一)— Java并发底层原理

    现已全部整理完,其他两篇并发整理(二)— Java线程与锁并发整理(三)— 并发集合类与线程池 本篇主要是底层的东...

网友评论

      本文标题:七周七并发模型-读书笔记-线程与锁

      本文链接:https://www.haomeiwen.com/subject/gtagyqtx.html