java基础
文章平均质量分 82
耶律妙月
这个作者很懒,什么都没留下…
展开
-
Java Stream实现原理
int longestStringLengthStartingWithA = strings.stream() .filter(s -> s.startsWith("A")) .mapToInt(String::length) .max();上述代码求出以字母A开头的字符串的最大长度,一种直白的流水线实现方式是为每一次函数调用都执一次迭代,并将处理中间结果放到某种数据结构中(比如数组,容器等)。这样原创 2021-08-17 16:24:32 · 796 阅读 · 0 评论 -
手写基于netty的简单RPC框架
主要技术点设计:注册中心:使用 MySQL注册服务信息序列化手段:hessian(本想用fastjson,然而对于泛型的处理实在太麻烦了)桩的生成方式:调用时使用模板和反射动态生成 java源代码并编译加载通信协议:大概会用netty自带的LengthFieldBasedFrameDecoder 来处理粘包拆包吧可插拔设计:SPI。注册中心、服务提供者都有使用到,方便后期替换不同的注册中心和服务实现类项目基础结构:service-interface:服务模块,包含其中用到的实体类cl原创 2020-07-07 10:57:27 · 641 阅读 · 0 评论 -
Java并发编程——几种锁的区别
第九章 synchronized与锁9.1 Synchronized关键字9.2 几种锁9.2.1 Java对象头9.2.2 偏向锁9.2.3 轻量级锁9.2.4 重量级锁9.2.5 总结锁的升级流程9.2.6 各种锁的优缺点对比第九章 synchronized与锁这篇文章我们来聊一聊Java多线程里面的“锁”。首先需要明确的一点是:Java多线程的锁都是基于对象的,Java中的每一个对象都可以作为一个锁。还有一点需要注意的是,我们常听到的类锁其实也是对象锁。 Java类只有一个Class对象(..转载 2020-12-29 11:54:49 · 404 阅读 · 0 评论 -
大型网站架构的10个问题
<p style="box-sizing: border-box;margin-bottom: 15px;font-size: 16px;white-space: pre-line;color: rgb(74, 74, 74);font-family: Avenir, -apple-system-font, 微软雅黑, sans-serif;text-align: start;line-height: 1.75em;"><span style="color...转载 2020-12-29 11:56:34 · 552 阅读 · 0 评论 -
并发编程学习笔记7—— 并发设计模式
文章目录一、不变性(Immutability)模式1. 创建具备不变性的类2. 利用享元模式避免创建重复对象一、不变性(Immutability)模式不变性模式是让共享变量只有读操作,而没有写操作,来解决并发问题的。1. 创建具备不变性的类将一个类所有的属性都设置成 final 的,并且只允许存在只读方法,那么这个类基本上就具备不可变性了。更严格的做法是这个类本身也是 final 的,也就是不允许继承。因为子类可以覆盖父类的方法,有可能改变不可变性。比如 String 这个类以及它的属性 val原创 2020-05-15 13:43:35 · 267 阅读 · 0 评论 -
并发编程学习笔记6—— Fork / Join 的简单使用
文章目录1. 分治任务模型2. Fork/Join 的使用3. ForkJoinPool 工作原理Java 并发包里提供了一种叫做 Fork/Join 的并行计算框架,用来支持分治。1. 分治任务模型分治任务模型可分为两个阶段:一个阶段是任务分解,也就是将任务迭代地分解为子任务,直至子任务可以直接计算出结果;另一个阶段是结果合并,即逐层合并子任务的执行结果,直至获得最终结果。下图是一个简化的分治任务模型图。任务和分解后的子任务具有相似性,这种相似性往往体现在任务和子任务的算法是相同的,但是计算的原创 2020-05-14 14:52:48 · 277 阅读 · 0 评论 -
并发编程学习笔记5——线程池、Future、CompletionService、CompletedFuture
文章目录一、ThreadPoolExecutor二、Future三、CompletionService四、CompletedFuture1. 使用CompletedFuture 实现烧水泡茶2. 创建 CompletableFuture 对象3. CompletionStage 接口串行关系AND 汇聚关系OR 汇聚关系异常处理思考题一、ThreadPoolExecutor一般意义上的池化资源,当需要资源的时候就调用 acquire() 方法来申请资源,用完之后就调用 release() 释放资源。原创 2020-05-14 09:06:17 · 1748 阅读 · 0 评论 -
并发编程学习笔记4——同步容器、并发容器、原子类
文章目录一、同步容器1.将非线程安全的容器变成线程安全的容器2.使用同步容器注意点二、并发容器及其注意事项1. List2. Map3. Set4. Queue三、原子类1.概述2.原子化的基本数据类型3.原子化的对象引用类型4.原子化数组5.原子化对象属性更新器6.原子化的累加器思考题一、同步容器1.将非线程安全的容器变成线程安全的容器思路其实很简单,只要把非线程安全的容器封装在对象内部...原创 2020-04-30 14:08:41 · 286 阅读 · 0 评论 -
并发编程学习笔记3——ReadWriteLock、StampedLock、CountDownLatch 和 CyclicBarrier
文章目录一、ReadWriteLock1.使用读写锁实现一个懒加载缓存2.读写锁的升级与降级二、StampedLock三、CountDownLatch 和 CyclicBarrier1.用 CountDownLatch 实现线程等待2.用 CyclicBarrier 实现线程同步3. CountDownLatch 和 CyclicBarrier 用法的区别思考题一、ReadWriteLock...原创 2020-04-26 17:12:04 · 218 阅读 · 0 评论 -
并发编程学习笔记2——管程、Lock & Condition、信号量
文章目录一、管程1.什么是管程2.MESA 模型互斥同步3.锁的正确用法4.wait() 的正确使用5.notify() 何时可以使用二、Lock和Condition1.Lock2.可重入锁3.可重入函数4.公平锁与非公平锁5.加锁的最佳实践思考题一、管程1.什么是管程Java 采用的是管程技术,synchronized 关键字及 wait()、notify()、notifyAll() 这...原创 2020-04-24 14:02:11 · 578 阅读 · 0 评论 -
并发编程学习笔记1——可见性、原子性、有序性问题,Java线程
文章目录一、并发编程的主要问题1.缓存带来的可见性问题2.线程切换带来的原子性问题3.编译优化带来的有序性问题二、解决方案1.按需禁用缓存和编译优化volatileHappens-Before 规则final 关键字2.锁3.死锁三、Java线程1.Java生命周期与状态转换2.如何设置合适的线程数四、用面向对象写并发程序1.封装共享变量2.识别共享变量间的约束条件3.制定并发访问策略思考题...原创 2020-03-12 13:49:07 · 237 阅读 · 0 评论 -
java基础学习笔记——java8特性
文章目录一、接口特性1.函数式接口2.默认方法和静态方法二、Lambda表达式三、方法引用四、Optional 接口五、时间相关类1. LocalDate / LocalTime2. LocalDateTime3. ZoneDateTime4. Clock5. Duration六、Stream七、Map虽然java8早在14年就发布了,但是很多书本和视频资料还停留在5或者6版本的时候。鄙人所...原创 2020-01-21 15:05:03 · 165 阅读 · 0 评论 -
由单例模式的优化引出的java线程数据同步和类加载顺序知识点总结
摘要 几种单例模式的优缺点及其改进优化 DCL失效问题的原因以及解决 java中线程同步关键字final和volatile java内存屏障 java类加载顺序总结饿汉单例 //片段1 class Singleton1{ private static Singleton1 instance = new Singleton1();...转载 2019-11-02 19:15:12 · 107 阅读 · 0 评论 -
LinkedList中add/offer、remove/poll、element/peek区别
offer,add区别:一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。通常用不上。 poll,remove区别:remove() 和 poll() 方法都是从队列中删除第一个...转载 2019-11-02 19:10:58 · 7266 阅读 · 0 评论