* 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 * If you can NOT explain it simply, you do NOT understand it well enough 陆续将Demo代码和技术文章整理在一起 Github实践精选,方便大家阅读查看,觉得不错,还请Star🌟🌟🌟🌟🌟🌟 抗击疫情,在家办公。工作照常干,领导需要几个新功能接口开发。以前在公司办公,通常开发完的功能没什么问题,暴露出 Swagger 接口文档,直接找旁边的前端大人联调测试了 当下,君在长江头,我在长江尾,夜夜思君不敢出门见
听说程序员看不上写 PPT ? 程序员是实干派,面对写 PPT 这事通常都是嗤之以鼻。头可断,万行代码不能乱;血可流,写PPT是真犯愁。写 PPT 着实是程序员工作中的三座大山之一 有人做了三分,可以通过 PPT 说出七分,有人做了七分,却说不出三分,程序员的内心活动正如去年很火的新东方年会改编 「沙漠骆驼」的歌词一样: 为了不再经历相似的年底考评悲剧。所以,作为老实人,如果做了七分,底线至少要说出七分,没有商量的余地 可是当程序员面对 PPT 或 KeyNote 总是无从下手,这要怎么办? 那咱就以程序员熟悉的方式写 PPT 呗 这里要给大家打个预防针,以这种方式写 PPT
前言 如果按照用途与特性进行粗略的划分,JUC 包中包含的工具大体可以分为 6 类: 1. 执行者与线程池 2. 并发队列 3. 同步工具 4. 并发集合 5. 锁 6. 原子变量 在并发系列中,主要讲解了 执行者与线程池,同步工具,锁 , 在分析源码时,或多或少的提及到了「队列」,队列在 JUC 中也是多种多样存在,所以本文就以「远看」视角,帮助大家快速了解与区分这些看似「杂乱」的队列 并发队列 Java 并发队列按照实现方式来进行划分可以分为 2 种: 1. 阻塞队列 2. 非阻塞队列 如果你已经看完并发系列锁的实现,你已经能够知道他们实现的区别: 前者就
前言 在 我会手动创建线程,为什么要使用线程池? 中详细的介绍了 ExecutorService,可以将整块任务拆分做简单的并行处理; 在 不会用Java Future,我怀疑你泡茶没我快 中又详细的介绍了 Future 的使用,填补了 Runnable 不能获取线程执行结果的空缺 将二者结合起来使用看似要一招吃天下了(Java有并发,并发之大,一口吃不下), but ~~ 是我太天真 ExecutorService VS CompletionService 假设我们有 4 个任务(A, B, C, D)用来执行复杂的计算,每个任务的执行时间随着输入参数的不同而不同,如果将任务提交
起因 起因是群里的一位童鞋突然问了这么问题: 如果重写 equals 不重写 hashcode 会有什么影响? 这个问题从上午10:45 开始陆续讨论,到下午15:39 接近尾声 (忽略这形同虚设的马赛克) 这是一个好问题,更是一个高频基础面试题,我还曾经专门写过一篇文章 Java equals 和 hashCode 的这几个问题可以说明白吗, 主要说明了以下内容 随着讨论的进行,问题慢慢集中在内存溢出和内存泄漏的问题上 内存溢出 VS 内存泄漏 这两个词在中文解释上有些相似,至少给我的第一感觉,他们的差别是这样的(有人和我一样吗?) 内存溢出:Out of Memory
无意间看到这个SQL客户端,瞬间被它简洁的页面吸引了, 启动画面可能是它最复杂的呈现了,爱没? SQLECTRON 按照官网 (https://sqlectron.github.io/, 看 URL 发现,SQLECTRON官网都是用 Github Pages 搭建的) 的说明: 一个简单的轻量级SQL客户端桌面/终端,具有跨数据库和跨平台的支持 看到这你应该放心了,无论你使用的是 Linux, Mac 还是 Windows,都可以试一试。那它支持哪些数据库呢?一会到安装界面你就会发现了 这里我用 MAC 演示一下整个使用过程 安装与使用 写本文时的版本为 v1.30.0, 直接
前言 上一篇文章 不会用Java Future,我怀疑你泡茶没我快 全面分析了 Future,通过它我们可以获取线程的执行结果,它虽然解决了 Runnable 的 “三无” 短板,但是它自身还是有短板: 不能手动完成计算 假设你使用 Future 运行子线程调用远程 API 来获取某款产品的最新价格,服务器由于洪灾宕机了,此时如果你想手动结束计算,而是想返回上次缓存中的价格,这是 Future 做不到的 调用 get() 方法会阻塞程序 Future 不会通知你它的完成,它提供了一个get()方法,程序调用该方法会阻塞直到结果可用为止,没有办法利用回调函数附加到Future,并在Fut
前言 创建线程有几种方式?这个问题的答案应该是可以脱口而出的吧 * 继承 Thread 类 * 实现 Runnable 接口 但这两种方式创建的线程是属于”三无产品“: * 没有参数 * 没有返回值 * 没办法抛出异常 1 2 3 4 5 6 class MyThread implements Runnable{ @Override public void run() { log.info("my thread"); } } Runnable 接口是 JDK1.0 的核心产物 1 2 3 4 5 6 7 /** * @since
前言 并发编程的三大核心是分工,同步和互斥。在日常开发中,经常会碰到需要在主线程中开启多个子线程去并行的执行任务,并且主线程需要等待所有子线程执行完毕再进行汇总的场景,这就涉及到分工与同步的内容了 在讲 有序性可见性,Happens-before来搞定 时,提到过 join() 规则,使用 join() 就可以简单的实现上述场景: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 @Slf4j public class JoinExample { pub
话不多说,先看图,你一眼应该就能看出变化了 Github 主要对 UI 设计以及 Repository 布局进行了更新,改善了访问和维护 Repository 的体验,其实主要有以下几点更新: 1. 响应式的布局以及改进了移动端 Web 的体验 2. 通过 Repository 侧边栏显示更多内容 3. 能够在 Repository 侧边栏现实/隐藏 Release 版本以及 Packages 和 Environments 目前整体改动虽然不大,但这些更改会为将来的渐进式改进奠定基础,接下来也会推出暗黑模式等内容 顺便要说一下,浏览 Github 必须要有的神器 O
前言 * 文章 Java AQS队列同步器以及ReentrantLock的应用 介绍了AQS独占式获取同步状态的实现,并以 ReentrantLock 为例说明其是如何自定义同步器实现互斥锁的 * 文章 Java AQS共享式获取同步状态及Semaphore的应用分析 介绍 AQS 共享式获取同步状态的实现,并说明了 Semaphore 是如何自定义同步器实现简单限流作用的 有了以上两篇文章的铺垫,来理解本文要介绍的既有独占式,又有共享式获取同步状态的 ReadWriteLock,就非常轻松了 ReadWriteLock ReadWriteLock 直译过来为【读写锁】。现实中,读



Copyright 2018-2019 Tanθ's Blog   |   辽ICP备19017651号-1   |     站点总字数: 229.8k 字   |   载入天数...载入时分秒...   |  站点地图   |  站长统计
  总访问量:  次  总访问人数:  人

博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议