
Java架构师(一)并发编程
文章平均质量分 91
深入学习Java内存模型、多线程、锁、线程池
无休止符
不要让任何事情,成为你不去学习的理由!!!
展开
-
七、Disruptor框架
Disruptor框架:高性能队列,无锁机制,底层使用CAS实现,基于事件驱动源原创 2022-03-09 17:02:51 · 3016 阅读 · 0 评论 -
六、锁的深入化
.一、重入锁1、Synchronized重入锁2、ReentrantLock重入锁 一、重入锁 重入锁概念: 也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。 在JAVA环境下 ReentrantLock 和synchronized 都是 可重入锁 重入锁可以避免死锁 1、Synchronized重入锁 2、ReentrantLock重入锁 set和get使用都是同一个lock锁 因为是在set方法中调用get,相当于方法递归传递 所以lock锁原创 2022-03-08 18:04:57 · 226 阅读 · 0 评论 -
五、Callable与Future模式
.一、合理配置线程池1、IO密集型2、CPU密集型二、Callable三、Future模式 一、合理配置线程池 1、IO密集型 任务需要大量的IO阻塞,要解决阻塞问题,可以使用多线程技术 为了保证CPU的运算能力,不会浪费资源,配置线程数=2*CPU核数 2、CPU密集型 该任务执行的时候不会产生大量的IO阻塞,CPU运行的时候速度特别快 配置线程数=CPU核数 二、Callable 在Java中,创建线程一般有两种方式,一种是继承Thread类,一种是实现Runnable接口。 然而,这两种方原创 2022-03-07 22:47:13 · 233 阅读 · 0 评论 -
四、并发包与线程池原理分析
.前言一、阻塞队列与非阻塞队列二、并发队列1、ConcurrentLinkedQueue 前言 一、阻塞队列与非阻塞队列 阻塞式队列 入列(存队列),如果超出队列总数,这时候会进行等待(阻塞) 当消费者获取队列之后,这个队列直接被删除,停止阻塞 出列(获取队列),如果获取队列为空的情况,这时候也会进行等待(阻塞) 当生产者存队列之后,停止阻塞 注意事项:消费者在消费队列信息之后,一定要清空队列 阻塞式队列最大好处,能够防止队列容器溢出,防止丢失数据 二、并发队列 两种并发队列原创 2022-03-07 18:37:28 · 234 阅读 · 0 评论 -
三、重排序和多线程之间通讯
.前言一、synchronized与Volatile二、重排序三、as-if-serial四、volatile在重排序的应用五、wait和notify 前言 一、synchronized与Volatile volatile 可以保证可见性,不能保证原子性(线程安全问题) 禁止重排序 synchronized 既可以保证可见性,还可以保证原子性 没有禁止重排序 synchronized是阻塞式的,同一时刻保证只能有一个线程在访问 二、重排序 概念:cpu会对代码实现执行优化,不会对有依赖关系原创 2022-03-06 22:20:49 · 131 阅读 · 0 评论 -
二、Java内存模型与多线程安全
.前言一、线程安全问题 前言 一、线程安全问题 当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题 但是做读操作是不会发生数据冲突问题 ...原创 2022-03-06 18:37:49 · 312 阅读 · 0 评论 -
一、多线程基础
一、多线程基础前言一、线程与进程区别二、多线程创建方式1、继承Thread类重写run方法2、实现Runnable接口重写run方法3、匿名内部类方式三、多线程的状态1、新建状态2、就绪状态3、运行状态4、阻塞状态5、死亡状态四、守护线程五、join方法作用六、面试题 前言 一、线程与进程区别 进程是所有线程的集合,每一个线程是进程中的一条执行路径 每个正在系统上运行的程序都是一个进程 进程是独立应用程序 每个进程包含一到多个线程 线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行原创 2022-03-06 03:18:58 · 94 阅读 · 0 评论