摘要: 目录 学习资料 《Java并发编程艺术》第11章 1.生产者消费者模式 生产者和消费者模式是通过一个容器(阻塞队列)来解决生产者和消费者的强耦合问题。通过阻塞队列来进行通信。(生产者—>阻塞队列—>消费者) 大多数设计模式,都会找一个第三者出来进行解耦,如工厂模式的第三者是工厂类,模板模式的第三者是 阅读全文
posted @ 2021-03-11 21:35 菜鸟kenshine 阅读(75) 评论(0) 推荐(0) 编辑
摘要: 学习资料 《Java并发编程的艺术》10.3~10.4 1.ScheduledThreadPoolExecutor详解 1.1 简介 主要用来在给定的延迟之后运行任务,或者定期执行任务,功能与Timer类似 Timer对应的是单个后台线程,而ScheduledThreadPoolExecutor可以 阅读全文
posted @ 2021-03-11 21:32 菜鸟kenshine 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 学习资料 《Java并发编程的艺术》第10章 10.1~10.2 1.Excutor简介 从JDK 5开始,把工作单元与执行机制分离开来。工作单元包括 Runnable 和 Callable ,而执行机制由 Executor 框架提供 1.1 两级调度模型 在HotSpot VM的线程模型中,Jav 阅读全文
posted @ 2021-03-11 21:27 菜鸟kenshine 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 目录 学习资料 《Java并发编程的艺术》第9章 1.简介 线程池好处: 降低资源消耗:线程创建销毁会消耗资源 提高响应速度 便于管理线程 2.线程池实现原理 线程池要素: corePool:核心线程池大小 maximunPool:最大线程池大小 BlockingQueue<Runnable>:任务 阅读全文
posted @ 2021-03-11 21:22 菜鸟kenshine 阅读(63) 评论(0) 推荐(0) 编辑
摘要: 目录 学习资料 《Java并发编程的艺术》第8章 1.CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作 thread.join()可让当前线程等待thread执行完毕再执行,原理是不停检查join的线程是否存活,如果thread线程存活则让当前线程永远 阅读全文
posted @ 2021-03-11 21:19 菜鸟kenshine 阅读(72) 评论(0) 推荐(0) 编辑
摘要: 学习资料 《Java并发编程的艺术》第7章 1.原子类简介 java5提供了java.util.concurrent.atomic包,该包的原子操作提供了一种用法简单、性能高效、线程安全地更新一个变量的方式,共12个类 Atomic包里的类基本上都是使用Unsafe实现的包装类 2.原子更新基本类型 阅读全文
posted @ 2021-03-11 21:18 菜鸟kenshine 阅读(73) 评论(0) 推荐(0) 编辑
摘要: 1.Fork/Join框架简介 Java7提供的一个并行任务执行,把大任务分割成小任务,最终汇总每个小任务结果后得到大任务结果的框架 Fork/Join运行流程图: 2.工作窃取算法 某个线程从其他队列窃取任务来执行 大任务分割为子任务,将子任务放在不同的任务队列中,每个队列创建一个单独线程来执行队 阅读全文
posted @ 2021-03-11 21:16 菜鸟kenshine 阅读(1094) 评论(0) 推荐(0) 编辑
摘要: 1.阻塞队列简介 阻塞队列是支持两个附加操作的队列(阻塞插入和阻塞移除) 阻塞插入:队列满时会阻塞插入元素的线程,直到队列不满 阻塞移除:队列为空时,获取元素的线程会等待元素变为非空 阻塞队列常用于生产者和消费者的场景 阻塞队列不可用(阻塞)时插入和移除操作的四种处理方式: 抛出异常:队列满再插入, 阅读全文
posted @ 2021-03-11 21:13 菜鸟kenshine 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 1.线程安全队列 两种方式: 阻塞算法:出队入队用同一把锁或分别用一把锁实现 非阻塞算法:循环CAS的方式实现 ConcurrentLinkedQueue是基于链接节点的无界线程安全队列,添加元素到队尾,从头部获取元素 2.ConcurrentLinkedQueue结构 每个节点由节点元素item和 阅读全文
posted @ 2021-03-11 21:10 菜鸟kenshine 阅读(83) 评论(0) 推荐(0) 编辑
摘要: 1.为什么使用ConcurrentHashMap 并发模式下使用HashMap的put会产生环形链,导致死循环 HashTable和Collections.synchronizedMap(map)则使用synchronized保证线程安全,效率很低 ConcurrentHashMap分段锁技术能够有 阅读全文
posted @ 2021-03-11 21:08 菜鸟kenshine 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 学习资料 《Java并发编程的艺术》第5章 5.4~5.6 1.读写锁简介 读写锁与排他锁: 排他锁:同一个时刻只能运行一个线程进行访问(不管读写),如ReentrantLock 读写锁:同一时刻允许有多个读线程访问,但是有写线程访问时,所有其他线程(不管读写)都被阻塞 Java并发包提供的读写锁的 阅读全文
posted @ 2021-03-11 21:05 菜鸟kenshine 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 目录 学习资料 《Java并发编程的艺术》第5章 5.1~5.3 1.Lock接口 和Synchronized类似,只是需要显式的获取锁和释放锁,不太便捷,但是更加灵活,提供了很多Synchronized所无法提供的特性(控制并操作锁,尝试获取锁,中断获取锁,超时获取锁等) Lock的简单使用: L 阅读全文
posted @ 2021-03-11 20:59 菜鸟kenshine 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 目录 学习资料 《Java并发编程的艺术》第4章 4.4 1.等待超时模式 等待超时伪代码如下: // 对当前对象加锁 public synchronized Object get(long mills) throws InterruptedException { long future = Sys 阅读全文
posted @ 2021-03-11 20:54 菜鸟kenshine 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 学习资料 《Java并发编程的艺术》第4章 4.1~4.3 1.线程简介 1.1 什么是线程 现代操作系统调度的最小单元,也叫轻量级进程 一个进程可以创建多个线程,线程有各自的计数器,堆栈和局部变量等属性 处理器在线程上高速切换(时间片调度),让使用者感觉到这些线程是同时执行的 1.2 为什么要使用 阅读全文
posted @ 2021-03-11 20:51 菜鸟kenshine 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 1. happens-before 1.1 JMM的设计要求 设计JMM时需要考虑: 程序员对内存模型的使用。希望内存模型易于理解。 JMM的happens-before规则简单易懂,向程序员提供了足够强的内存可见性保证 编译器和处理器对内存模型的实现。希望内存模型对编译器和处理器限制越少越好(便于 阅读全文
posted @ 2021-03-11 20:46 菜鸟kenshine 阅读(89) 评论(0) 推荐(0) 编辑
摘要: 1.volatile内存语义 Volatile主要作用是使变量在多个线程间可见 1.1 volatile特性 可见性:对一个volatile变量的读,总能看到(任意线程)对该变量最后的写入 原子性:即使是64为的long型和double型变量,只要声明为volatile变量,对该变量的读写就具有原子 阅读全文
posted @ 2021-03-11 20:35 菜鸟kenshine 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 1.内存模型基础 Java内存模型,Java Memory Model简称JMM。 1.1 两个关键问题 线程间如何通信和线程间如何同步 a.如何通信 两种机制:共享内存,消息通信 共享内存: 线程共享程序公共状态,通过读写公共状态进行通信 消息通信: 线程间通过发送消息显示通信 Java采用的是共 阅读全文
posted @ 2021-03-11 20:25 菜鸟kenshine 阅读(86) 评论(0) 推荐(0) 编辑
摘要: 1.依赖JVM java代码编译为字节码,JVM执行字节码生成汇编指令,CPU执行汇编指令。 java并发机制依赖于JVM的实现和CPU指令。 2.Volatile实现原理 轻量级Sycronized,保证了共享变量的可见性 保证一个线程修改一个共享变量后,另一个线程总是能够读到这个修改后的变量值 阅读全文
posted @ 2021-03-11 20:16 菜鸟kenshine 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 0.学习资料 《Java并发编程的艺术》第一章 1.上下文切换 单核处理器支持多线程时,通过cpu时间片切换(分配)来实现 时间片执行完可能会切换到其他任务 切换前保存当前任务状态,然后加载其他任务,之后某个时间片切换回该任务可继续加载该任务,这个任务切换过程就是一次上下文切换 任务从保存到加载的过 阅读全文
posted @ 2021-03-11 20:02 菜鸟kenshine 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 1. Java客户端远程连接时的三个坑 No route info of this topic SENDDEFAULTIMPL CALL TIMEOUT connect to 172.17.42.1:10911 failed 解决: 配置broker.conf,添加 brokerIP1=服务器地址 阅读全文
posted @ 2021-03-11 14:20 菜鸟kenshine 阅读(335) 评论(1) 推荐(0) 编辑