5 天前 / luoxn28
Lock/Condition 是 Java 中提供的等待通知机制,使用 Condition 的 await 和 signal,类似于基于 synchronized 的 wait 和 notify,二者都可以实现等待通知机制。 但是,这两者在使用和实现方式上还是有差别的。比如: 等待通知机制涉及到同步队列和等待队列,Object 的 wait/notify 只能拥有一个等待队列,而 Condition 可以拥有多个等待队列。 wait/notify 的等待队列管理是由 JVM 控制的,而 Condition 的是由 jdk/juc 实现的。
32 天前 / Hollis
2021-03-14 分类:框架阅读 (146) 评论 (0)GitHub 19k Star 的 Java 工程师成神之路,不来了解一下吗!Redis 是目前广为人知的一个内存数据库,在各个场景中都有着非常丰富的应用,前段时间 Redis 推出了 6.0 的版本,在新版本中采用了多线程模型。 因为我们公司使用的内存数据库是自研的,按理说我对 Redis 的关注其实并不算多,但是因为 Redis 用的比较广泛,所以我需要了解一下这样方便我进行面试。 总不能候选人用过 Redis,但是我非要问人家阿里的 Tair 是怎么回事吧。
39 天前 / 三分恶
在面试当中,有时候会问到你在项目中用过多线程么? 对于普通的应届生或者工作时间不长的初级开发 ???—— crud 仔流下了没有技术的眼泪。 博主这里整理了项目中用到了多线程的一个简单的实例,希望能对你有所启发。 多线程开发实例应用背景应用的背景非常简单,博主做的项目是一个审核类的项目,审核的数据需要推送给第三方监管系统,这只是一个很简单的对接,但是存在一个问题。 我们需要推送的数据大概三十万条,但是第三方监管提供的接口只支持单条推送(别问为什么不支持批量,问就是没讨撕论比好过)。
44 天前 / 猿天地
背景在多线程下的生产者 - 消费者模型中,需求满足如下情况: 对生产者生产投递数据的性能要求非常高多个生产者,单个(多个也可以,本文只介绍单个的情况)消费者当消费者跟不上生产者速度时,可容忍少部分数据丢失生产者是单条单条地生产数据举个日志采集的例子,日志在不同的线程上生产,在日志生产速度远超消费者速度时,可以丢弃部分数据,要求打日志的性能损耗最小,这种情况下可采用本文提供的极致性能的缓冲队列。
50 天前 / Silently9527
摘要上周使用 Java 开发了大文件多线程下载工具类,自己平时的文件下载也在使用这个工具,下载速度确实提升不少,但是每次下载都要去打开项目运行代码,觉得实在不是很方便;考虑到每天我们都会使用到 IDEA 开发工具,所以就决定把这个下载工具做成 IDEA 的插件,文章末尾附上插件下载地址。 Java 实现大文件多线程下载 Gitee 地址:https://gitee.com/silently9527/fast-downloadIDEA 多线程文件下载插件 Github 地址:https://github.com/silently9527/FastDownloadIdeaPluginGitee 地址:https://gitee.com/silently9527/FastDownloadIdeaPlugin 不要忘...
53 天前 / Silently9527
前言在上一篇文章 《面试篇》Http 协议 中,我们有提到大文件下载和断点续传,本篇我们就来开发一个多线程文件下载器,最后我们用这个多线程下载器来突破下载的限速。 兄弟们看到这个标题可能会觉得是个标题党,为了解决疑虑,我们先来看下最终的测试结果: 测试云盘下载的文件 46M,自己本地最大下载速度 2M 1. 单线程下载,总耗时: 603s2. 多线程下载,50 个线程,总耗时:13s 测试结果,「提速 46 倍」,我还是太谦虚了,只说提速 30 倍,此处我们觉得应该有掌声(我听不到,还是点赞实在) 源码地址:https://gitee.com/silently9527/fast-download 喜...
124 天前 / 钟子敬07
持续坚持原创输出,点击蓝字关注我吧 作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获! 目录 一、前言 二、多线程和锁没用过? 三、你的成长阶段目标? 四、怎么成长为架构师? 五、总结 六、系列推荐 一、前言你只面向工作学习吗? 如果说编程只是单纯的承接产品需求开发系统功能,那么基本可以把程序开发简单理解成按照需求 PRD,定义属性、创建方法、调用展示,这三个步骤。
145 天前 / luoxn28
戳蓝字「TopCoder」关注我们哦! Java8 之前,如果要对计算结果进行异步化处理不是很方便,需要借助于 Future,并且需要当前线程主动执行 Future.get 获取运行结果。因此 Java8 新增了 CompletableFuture 提供对异步计算的支持,可以通过回调的方式处理计算结果,注意此时执行回调处理的是执行任务的线程。 CompletableFuture 类实现了 CompletionStage 和 Future 接口,所以还可以像之前使用 Future 那样使用 CompletableFuture ,尽管已不再推荐这样用了。
146 天前 / 小姐姐味道
不羡鸳鸯不羡仙,一行代码调半天。原创:小姐姐味道(微信公众号 ID:xjjdog),欢迎分享,转载请保留出处。 周末被一位小同学憋的很窝火。他要和我探讨一下,redis 到底是多线程的还是单线程的。这个问题本来比较好解释,但我遇到的却是一个杠精。 答案是显而易见的:redis6,逃不过真香定理,引入了多线程;而在 redis6 之前,却是单线程的。 也就是说,这不是一个是和否的问题,还涉及到第二维度的版本参与。 可是,这位同学要打我的脸。不知道小姐姐的脸皮很嫩么?摸不得。 “照你的逻辑,redis5 是单线程的了?” “是的。
163 天前 / luoxn28
happens-before 是一些规则,规定了某个线程修改的变量何时对其他线程可见。从 JDK 5 开始,JMM 就使用 happens-before 的概念来阐述多线程之间的内存可见性。在 JMM 中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须存在 happens-before 关系。 happens-before 原则定义如下: 如果一个操作 happens-before 另一个操作,那么第一个操作的执行结果将对第二个操作可见,而且第一个操作的执行顺序排在第二个操作之前。 两个操作之间存在 happens-before 关系,并不意味着一定要按照 happens-before 原则制定的顺序来执行。
171 天前 / 不瘦
(给数据分析与开发加星标,提升数据技能) 转自:小林 Coding 前言生活中用到的锁,用途都比较简单粗暴,上锁基本是为了防止外人进来、电动车被偷等等。 但生活中也不是没有 BUG 的,比如加锁的电动车在「广西 - 窃·格瓦拉」面前,锁就是形同虚设,只要他愿意,他就可以轻轻松松地把你电动车给「顺走」,不然打工怎么会是他这辈子不可能的事情呢?牛逼之人,必有牛逼之处。 那在编程世界里,「锁」更是五花八门,多种多样,每种锁的加锁开销以及应用场景也可能会不同。 如何用好锁,也是程序员的基本素养之一了。
212 天前 / clumsy
wait、notify、notifyAll前几篇复习了下《线程的创建方式》、《线程的状态》、《Thread 的源码解析》这几篇文章。这篇是第四篇,讲讲 Object 几个跟线程获取释放锁相关的方法:wait、notify、notifyAll。 wait 方法源码解析由于 wait () 是 Object 类的 native 方法,在 idea 中,它长这样: publicfinalnativevoidwait(longtimeout)throwsInterruptedException; 看不了源码,那只能看源码的注释,注释太长,我摘取一些关键的点出来: 1、 Causesthecurrentthreadtowaituntileitheranotherthread invokesthenotify()methodorthenotifyAll()met...
218 天前 / sjf0115
一、背景目前快手有 70w+ 的 Redis 实例,在线上的 Redis 集群,我们经常会碰到以下的一些情况: (1) 由于键值设计不合理或者业务特性导致的热点问题(集群整体 QPS 不高,但是集群内某个实例的请求特别高),严重影响业务侧请求的返回时间 (2) 集群内某个实例直连集群连接数过多,单线程模型处理缓慢,影响其他的请求 (3) 集群内某个实例网络不稳定后者 pipeline 个数较多,导致协议解析频繁调用,导致 cpu 时间占用过长,影响其他的客户端请求 以上这些问题,相信大家也都碰到过...
240 天前 / 猿天地
转自:搜狐技术产品作者:汪建 本文字数:3107 字 预计阅读时间:10 分钟 关于读写锁 Java 语法层面的 synchronized 锁和 JDK 内置可重入锁 ReentrantLock 我们都经常会使用,这两种锁都属于纯粹的独占锁,也就是说这些锁任意时刻只能由一个线程持有,其它线程都得排队依次获取锁。 为了提高并发性能我们会额外引入共享锁来与独占锁共同对外构成一个锁,这种就叫读写锁。 为什么叫读写锁呢?主要是因为它的使用考虑了读写场景,一般认为读操作不会改变数据所以可以多线程进行读操作,但写操作会改变数据所以只能一个线程进行写操作。
241 天前 / 编程技术宇宙
程序员经常要面临的一个问题就是:如何提高程序性能? 这篇文章,我们循序渐进,从内存、磁盘 I/O、网络 I/O、CPU、缓存、架构、算法等多层次递进,串联起高性能开发十大必须掌握的核心技术。 - I/O 优化:零拷贝技术 - I/O 优化:多路复用技术 -线程池技术 -无锁编程技术 -进程间通信技术 -RPC&&序列化技术 -数据库索引技术 -缓存技术&&布隆过滤器 -全文搜索技术 -负载均衡技术 准备好了吗,坐稳了,发车! 首先,我们从最简单的模型开始。