
并发编程
文章平均质量分 92
小熊学Java
3年互联网金融方面的工作经验,优快云 Java领域优质创作者,阿里云社区博客专家,51CTO博客专家博主,担任过项目技术负责人,目前专攻于Java领域,也是全栈工程师哦!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
重新认识一下,从BIO到NIO,再到AIO,响应式编程
今天,我们讲到了BIO、NIO、AIO 等概念和基本的编程模型 Reactor,我们了解到:BIO 的线程模型是一个连接对应一个线程的,非常浪费资源;NIO通过对关键事件的监听,通过主动通知的方式完成非阻塞操作,但它对事件本身的处理依然是阻塞的;AIO 完全是异步非阻塞的,但现实中使用很少。使用 Netty 的多 Acceptor 模式和多线程模式,我们能够方便地完成类似 AIO 这样的操作。Netty 的事件触发机制使用了高效的 ET 模式,使得支持的连接更多,性能更高。原创 2024-08-22 12:57:34 · 1058 阅读 · 0 评论 -
案例分析:多线程锁该如何优化?
Java 中的 synchronized 有偏向锁、轻量级锁、重量级锁三种形式,分别对应了锁只被一个线程持有、不同线程交替持有锁、多线程竞争锁三种情况。描述重量级锁底层使用的 Monitor 实现,里面涉及到了用户态和内核态的切换、进程的上下文切换,成本较高,性能比较低。轻量级锁线程加锁的时间是错开的(也就是没有竞争),可以使用轻量级锁来优化。轻量级修改了对象头的锁标志,相对重量级锁性能提升很多。每次修改都是 CAS 操作,保证原子性偏向锁。原创 2024-08-20 12:50:09 · 1058 阅读 · 0 评论 -
案例分析:并行计算让你的代码“飞”起来
现在的电脑,往往都有多颗核,即使是一部手机,也往往配备了并行处理器,通过多进程和多线程的手段,就可以让多个 CPU 核同时工作,加快任务的执行。Java 提供了非常丰富的 API,来支持多线程开发。对我们 Java 程序员来说,。但它如何应用到业务场景中?又有哪些注意事项?今天将从一个并行获取数据的例子开始,逐步讲解这个面试中最频繁的知识点。原创 2024-08-01 20:00:31 · 921 阅读 · 0 评论 -
如何看到 synchronized 背后的“monitor 锁”?
Java全能学习+面试指南:https://javaxiaobear.cn。原创 2024-04-05 20:05:46 · 359 阅读 · 0 评论 -
面试官:HashMap为什么是线程不安全的?
今天我们主要讲解为什么 HashMap 是线程不安全的?而对于 HashMap,相信你一定并不陌生,HashMap 是我们平时工作和学习中用得非常非常多的一个容器,也是 Map 最主要的实现类之一,但是它自身并不具备线程安全的特点,可以从多种情况中体现出来,下面我们就对此进行具体的分析。原创 2024-04-05 20:02:55 · 305 阅读 · 0 评论 -
ConcurrentHashMap在Java 7和Java 8中有何不同?
在 Java 8 中,对于 ConcurrentHashMap 这个常用的工具类进行了很大的升级,对比之前 Java 7 版本在诸多方面都进行了调整和变化。不过,在 Java 7 中的 Segment 的设计思想依然具有参考和学习的价值,所以在很多情况下面试官都会问你:ConcurrentHashMap 在 Java 7 和 Java 8 中的结构分别是什么?它们有什么相同点和不同点?所以本课时就对 ConcurrentHashMap 在这两个版本的特点和性质进行对比和介绍。原创 2024-04-04 03:45:50 · 217 阅读 · 0 评论 -
你知道synchronized关键字的底层原理?
Java中的synchronized有偏向锁、轻量级锁、重量级锁三种形式,分别对应了锁只被一个线程持有、不同线程交替持有锁、多线程竞争锁三种情况。描述重量级锁底层使用的Monitor实现,里面涉及到了用户态和内核态的切换、进程的上下文切换,成本较高,性能比较低。轻量级锁线程加锁的时间是错开的(也就是没有竞争),可以使用轻量级锁来优化。轻量级修改了对象头的锁标志,相对重量级锁性能提升很多。每次修改都是CAS操作,保证原子性偏向锁。原创 2023-11-03 10:37:45 · 130 阅读 · 1 评论 -
为什么多线程会带来性能问题?
今天我们主要学习哪些场景需要额外注意线程安全问题,在这里总结了四种场景。原创 2023-10-28 17:24:07 · 301 阅读 · 0 评论 -
哪些场景需要额外注意线程安全问题
今天我们主要学习哪些场景需要额外注意线程安全问题,在这里总结了四种场景。原创 2023-10-27 13:08:41 · 315 阅读 · 0 评论 -
使用线程时,有哪三种常见的线程安全问题
要想弄清楚有哪 3 类线程安全问题,首先需要了解什么是线程安全,线程安全经常在工作中被提到,比如:你的对象不是线程安全的,你的线程发生了安全错误,虽然线程安全经常被提到,但我们可能对线程安全并没有一个明确的定义。《Java Concurrency In Practice》的作者 Brian Goetz 对线程安全是这样理解的,当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行问题,也不需要进行额外的同步,而调用这个对象的行为都可以获得正确的结果,那这个对象便是线程安全的。原创 2023-10-24 11:30:41 · 186 阅读 · 0 评论 -
并发编程中有哪几种实现生产者消费者模式的方法?
Java全能学习+面试指南:https://javaxiaobear.cn我们主要学习如何用 wait/notify/Condition/BlockingQueue 实现生产者消费者模式。原创 2023-10-23 10:55:06 · 148 阅读 · 1 评论 -
wait、notify、notifyAll 方法的使用注意事项?
我们来看第二个问题,为什么 wait/notify/notifyAll 方法被定义在 Object 类中?而 sleep 方法定义在 Thread 类中?因为 Java 中每个对象都有一把称之为 monitor 监视器的锁,由于每个对象都可以上锁,这就要求在对象头中有一个用来保存锁信息的位置。这个锁是对象级别的,而非线程级别的,wait/notify/notifyAll 也都是锁级别的操作,它们的锁属于对象,所以把它们定义在 Object 类中是最合适,因为 Object 类是所有对象的父类。原创 2023-10-23 10:40:53 · 148 阅读 · 0 评论 -
线程是如何在 6 种状态之间转换的?
Java全能学习+面试指南:https://javaxiaobear.cn今天我们主要学习线程是如何在 6 种状态之间转换的。原创 2023-10-21 17:25:18 · 229 阅读 · 0 评论 -
如何正确停止线程?为什么 volatile 标记位的停止方法是错误的?
通常情况下,我们不会手动停止一个线程,而是允许线程运行到结束,然后让它自然停止。但是依然会有许多特殊的情况需要我们提前停止线程,比如:用户突然关闭程序,或程序运行出错重启等。在这种情况下,即将停止的线程在很多业务场景下仍然很有价值。尤其是我们想写一个健壮性很好,能够安全应对各种场景的程序时,正确停止线程就显得格外重要。但是Java 并没有提供简单易用,能够直接安全停止线程的能力。原创 2023-10-21 15:32:58 · 271 阅读 · 0 评论 -
为何说只有 1 种实现线程的方法?
Java全能学习+面试指南:https://javaxiaobear.cn或许你还会说,我还知道一些其他方式,比如匿名内部类或 lambda 表达式方式,实际上,匿名内部类或 lambda 表达式创建线程,它们仅仅是在语法层面上实现了线程,并不能把它归结于实现多线程的方式,如匿名内部类实现线程的代码所示,它仅仅是用一个匿名内部类把需要传入的 Runnable 给实例出来。我们再来看下 lambda 表达式方式。如代码所示,最终它们依然符合最开始所说的那两种实现线程的方式。原创 2023-10-20 17:12:25 · 121 阅读 · 0 评论 -
你知道哪几种Java锁?分别有什么特点?
今天我们聊一聊Java锁的分类。原创 2023-10-10 11:30:24 · 125 阅读 · 0 评论